資源簡介
滴水算法實現,包含按順序分解數字圖片的功能
代碼片段和文件信息
function?[tile1?tile2]?=?dropfall(tile?dir)
width=size(tile2);?%列數
height=size(tile1);%行數
cut=zeros(height1);%n行1列
if?strcmp(dir‘bottom-right‘)==1
tile=fliplr(tile);
tile=flipud(tile);
elseif?strcmp(dir?‘bottom-left‘)==1
tile=flipud(tile);
elseif?strcmp(dir?‘top-right‘)==1
????tile=fliplr(tile);
end
%look?for?starting?point?to?begin?cutting?at
%Stored?under?variable?start_x
for?row=1:height
????found_candidate=0;%找到的標志符號
????found_start=0;????%剪切點的開始
????candidate_x=0;????%候選剪切點的橫坐標
????candidate_y=0;????%候選剪切點的縱坐標
????start_x=0;????????%剪切點橫坐標
????start_y=0;????????%剪切點縱坐標
%Check?the?搑ight?three?fourths?minus?some?of?each
%row?for?the?candidate
????for?col=round(width/4):width-1?
????????pres_pix?=?tile(rowcol);
????????prev_pix?=?tile(rowcol-1);
????????next_pix?=?tile(rowcol+1);
????????if?pres_pix==0?&?next_pix>0
????????????found_candidate=1;
????????????candidate_x=col;
????????????candidate_y=row;
????????end
????????if?found_candidate==1?&?pres_pix==0?&?prev_pix>0
????????????found_start=1;
????????????start_x=candidate_x+1;
????????????start_y=candidate_y;
????????end
????end
????if?found_start==1??%找到候選點就跳出循環,候選點像素為0,旁邊都是1
????????break;
????end
end
%Start?the?drop?fall!
%Start?de?ning?the?cut
cut(:1)=start_x*ones(height1);?%以開始點的橫坐標為切割線
row=start_y;
col=start_x;
path_tile=tile;
cut_point_x=0;
cur_point_y=0;
while?(row ????if?path_tile(row+1col)==255
????????row=row+1;
????elseif?path_tile(row+1col+1)==255
????????row=row+1;
????????col=col+1;
????elseif?path_tile(row+1col-1)==255
????????row=row+1;
????????col=col-1;
????elseif?path_tile(row?col+1)==255
????????col=col+1;
????elseif?path_tile(row?col-1)==255
????????col=col-1;
????else
????????if?tile(rowcol)==255
????????????cut_point_y=row;?%point?at?which?the?cutting?into?the?black?begins
????????????cut_point_x=col;
????????end
????????row=row+1;
????end
????path_tile(rowcol)=500;?%This?marks?where?the?path?has?been
????cut(row1)=col;
end
width1=max(cut)-1;
min_cut=min(cut);
width2=width-min_cut+1;
tile1=255*ones(height?width1);
tile2=255*ones(height?width2);
for?i=1:height
????x_cut=cut(i);
????tile1(i?1:x_cut-1)=tile(i?1:x_cut-1);
????tile2(i?x_cut-min_cut+1:?width2)=tile(i?x_cut:width);
end
if?strcmp(dir‘bottom-right‘)==1
????tile1=fliplr(tile1);
????tile1=flipud(tile1);
????tile2=fliplr(tile2);
????tile2=flipud(tile2);
%Switch?tiles?1?&?2?they?get?reversed?because?of?all?the??ipping
????dummy=tile1;
????tile1=tile2;
????tile2=dummy;
elseif?strcmp(dir?‘bottom-left‘)==1
????tile1=flipud(tile1);
????tile2=flipud(tile2);
elseif?strcmp(dir?‘top-right‘)==1
????tile1=fliplr(tile1);
????tile2=fliplr(tile2);
????dummy=tile1;
????tile1=tile2;
????tile2=dummy;
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-03-14?11:52??DropFall\
?????文件??????158774??2013-02-27?02:34??DropFall\c.bmp
?????文件???????80406??2013-02-27?02:40??DropFall\d.bmp
?????文件????????2897??2013-03-05?23:37??DropFall\dropfall.asv
?????文件????????2897??2013-03-05?23:39??DropFall\dropfall.m
?????文件?????????241??2013-02-28?17:33??DropFall\main.m
?????文件??????236278??2013-02-28?17:21??DropFall\new.bmp
?????文件????????1501??2013-01-23?13:46??DropFall\tu.jpg
?????文件????????1198??2013-01-23?13:47??DropFall\tu1.jpg
?????文件????????1510??2013-01-23?13:47??DropFall\tu2.jpg
?????文件????????1696??2013-01-23?13:48??DropFall\tu3.jpg
?????文件????????1759??2013-01-23?13:48??DropFall\tu4.jpg
評論
共有 條評論