Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %% 读取图片
- img = imread('船.bmp');
- %% 全局阈值二值化
- bw = img>65;
- figure;
- imshow(bw);
- %% 横向投影
- ys = sum(bw,2);
- figure;
- plot(ys);
- %% 去掉下面的部分和宽度大于1/2的部分
- for i=length(ys):-1:1
- if ys(i) > 0
- ys(i) = 0;
- else
- break;
- end
- end
- ys(ys>size(img,2)/2) = 0;
- bw(ys==0,:)=0;
- figure;
- imshow(bw);
- %% 选取最大连通分量
- L = bwlabel(bw);
- areas = regionprops(L, 'area');
- areas = [areas.Area];
- index = find(areas==max(areas));
- mask=L==index;
- figure;
- tmp = img;
- tmp(mask==0) = 0;
- imshow(tmp);
- %% 区域生长
- figure;
- mins = [109*ones(35,1),(121:155)'];
- thres = 6;
- g_thres = 75;
- while ~isempty(mins)
- l = size(mins,1);
- for i = 1:l
- x = mins(i,1);
- y = mins(i,2);
- v = img(x,y);
- if x==1 || y==1 || x==285 || y==378
- continue
- end
- for j=-1:1
- for k=-1:1
- if (abs(img(x+j,y+k)-v) < thres) && (mask(x+j,y+k)==0) && img(x+j,y+k)>g_thres
- mins = [mins;x+j,y+k];
- mask(x+j,y+k) = 1;
- end
- end
- end
- end
- mins(1:l,:) = [];
- end
- subplot(2,2,1);
- imshow(mask);
- subplot(2,2,2);
- ic = imclose(mask,ones(3,3));
- imshow(ic);
- subplot(2,2,3);
- res = img;
- res(ic==0)=0;
- imshow(res);
Add Comment
Please, Sign In to add comment