logo资料库

分水岭算法识别米粒.docx

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
分水岭算法识别米粒 % 显示原始图像 % 读入图像 % 转换为黑白二值图像 博客链接:https://blog.csdn.net/Fly_Fly_Zhang/article/details/89220762 代码实现: f=imread('C:\Users\lenovo\Desktop\3(1).bmp'); figure,imshow(f); title('原始图像'); bw=imbinarize(f,graythresh(f)); figure; imshow(bw); title('二值图像'); bwc=~bw; dst=bwdist(bwc); ws=watershed(-dst); figure; imshow(ws); title('分水岭算法后距离变换'); w=ws==0; rf=bw&~w; %原图灰度图与分水岭算法处理后的图进行重叠 figure,imshow(rf); title('分水岭算法和原始图像重叠后的图像'); % 图像反色,黑白反转 % 图像距离 % 分水岭算法 % 获得纵方向的 sobel 算子 h=fspecial('sobel'); fd=im2double(f); % 数据类型转换-》双精度浮点型 %使用梯度算子进行计算 sq=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2) ; sqoc=imclose(imopen(sq,ones(3,3)),ones(3,3)); % 图像闭合运算 wsd=watershed(sqoc); figure; imshow(wsd); title('梯度图像'); %分水岭运算 wg=wsd==0; rfg=f; rfg(wg)=255; figure; imshow(rfg); title('分水岭图像和原始图像叠加后图像'); im=imextendedmin(f,18); %这里可以使用 imimposemin 来修改梯度幅值图像 Lim=watershed(bwdist(im)); figure,imshow(Lim); title('分水岭标志图像'); %用来修改图像,使其只是在特定的要求位置有局部极小。
em=Lim==0; rfmin=imimposemin(sq,im|em); wsdmin=watershed(rfmin); figure,imshow(rfmin); title('流域-梯度和标记控制'); rfgm=f; rfgm(wsdmin==0)=255; figure,imshow(rfgm); title('分水岭和原始图像叠加后图像');
分享到:
收藏