分水岭算法1:
I= imread('D:\shiyan2\IMG_2152.jpg');
imshow(I);
h=fspecial('sobel'); %h = fspecial(type) creates a two-dimensional filter h of the specified type. fspecial returns h as
%a correlation kernel, which is the appropriate form to use with imfilter. type is a string having one of these values.
fd=double(I);%double使数据变成双精度
g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);
figure;
imshow(g);
g2=imclose(imopen(g,ones(3,3)),ones(3,3));
figure;
imshow(g2);
im=imextendedmin(g2,10); %
Lim=watershed(bwdist(im)); %watershed分水岭算法 Lim的值greater than or equal to 0,等于0是分水岭脊像素
em=Lim==0;
g3=imimposemin(g2,im|em);
g4=watershed(g3);
figure;
imshow(g4);
g5=I;
g5(g4==0)=255;
figure;
imshow(g5);
分水岭算法2:
%直接对梯度图像进行分水岭变换
rgb = imread('D:\shiyan2\IMG_2152.jpg');%读取原图像
I = rgb2gray(rgb);%转化为灰度图像
imshow(I),title('原始灰度图像')
hy = fspecial('sobel');%sobel算子
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');%滤波求y方向边缘
Ix = imfilter(double(I), hx, 'replicate');%滤波求x方向边缘
gradmag = sqrt(Ix.^2 + Iy.^2);%求模
L = watershed(gradmag);%直接应用分水岭算法
Ig=L==0;
figure; imshow(Ig), %显示分割后的图像边界
title('梯度图像的分水岭变换边界(Ig)')
%********************************************************
%通过对图像进行一系列预处理,解决过分割问题
se = strel('disk', 20);%圆形结构元素
Io = imopen(I, se);%形态学开操作
figure; subplot(121)
imshow(Io), %显示执行开操作后的图像
title('开操作(Io)')
Ie = imerode(I, se);%对图像进行腐蚀
Iobr = imreconstruct(Ie, I);%形态学重建
subplot(122); imshow(Iobr), %显示重建后的图像
title('腐蚀后形态学重建(Iobr)')
Ioc = imclose(Io, se);%形态学关操作
figure; subplot(121)
imshow(Ioc), %显示关操作后的图像
title('关操作(Ioc)')
Iobrd = imdilate(Iobr, se);%对图像进行膨胀
Iobrcbr = imreconstruct(imcomplement(Iobrd), ...
imcomplement(Iobr));%形态学重建
Iobrcbr = imcomplement(Iobrcbr);%图像求反
subplot(122); imshow(Iobrcbr), %显示重建求反后的图像
title('膨胀后形态学重建求反(Iobrcbr)')
fgm = imregionalmax(Iobrcbr);%局部极大值
figure; imshow(fgm), %显示重建后局部极大值图像
title('重建后局部极大值图像(fgm)')
I2 = I;
I2(fgm) = 255;%局部极大值处像素值设置为255
figure; imshow(I2), %在原图上显示极大值区域
title('图上显示极大值区域(I2)')
se2 = strel(ones(5,5));%结构元素
fgm2 = imclose(fgm, se2);%关操作
fgm3 = imerode(fgm2, se2);%腐蚀
fgm4 = bwareaopen(fgm3, 20);%开操作
I3 = I; I3(fgm4) = 255;%前景处设置为255
figure; subplot(121)
imshow(I3)%显示修改后的极大值区域
title('修改后的极大值区域(I3)')
bw = im2bw(Iobrcbr, graythresh(Iobrcbr));%转化为二值图像
subplot(122); imshow(bw), %显示二值图像
title('二值图像(bw)')
D = bwdist(bw);%计算距离
DL = watershed(D);%分水岭变换
bgm = DL == 0;%求取分割边界
figure; imshow(bgm), %显示分割后的边界
title('分水岭边界(bgm)')
gradmag2 = imimposemin(gradmag, bgm | fgm4);%设置最小值
L = watershed(gradmag2);%分水岭变换
I4 = I;
I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;%前景及边界处设置为255
figure;imshow(I4)%突出前景及边界
title('前景和背景边界')
fenshuiling.rar_分水岭算法
版权申诉
12 浏览量
2022-07-14
10:11:41
上传
评论
收藏 2KB RAR 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- 背景music,用作业网轮地址
- comment_6e56cd5d6e140046ef1cd248910ea5ca.png
- 基于卷积神经网络的自动驾驶系统的设计与实现
- MySQL的执行原理-2.md
- 基于 FCN 网络对无人机俯拍下的生活场景语义分割(12类别)【包含数据集、完整代码、训练好的结果、权重文件等等】
- CISCN2024-re3-rust-baby(Frida多字节程序插桩爆破)
- soft:磁盘清理工具
- .netcore控制台使用Nssm打包windows服务,加winform管理服务界面
- db-college.sql
- wpf-dragdrop-treeview(WPF较好拖拽效果).7z
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈