【图像分割】分水岭算法的图像分割【Matlab 307期】_m0

关注
【图像分割】分水岭算法的图像分割【Matlab 307期】_m0www.shan-machinery.com一、简介

分水岭算法是一种图像区域分割法,分割的过程中将图片转化为灰度图,然后我会将灰度值看作是海拔,然后向较低点注水,这种基于地形学的解释,我们着重考虑三种点: 在这里插入图片描述 极小值点,该点对应一个盆地的最低点,当我们在盆地里滴一滴水的时候,由于重力作用,水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内的都是极小值点。 盆地的其它位置点,该位置滴的水滴会汇聚到局部最小点。 盆地的边缘点,是该盆地和其它盆地交接点,在该点滴一滴水,会等概率的流向任何一个盆地。 在这里插入图片描述 明白上述三种点之后,我们开始往盆地的极小值点注水,然后随着注水的深入,每一个极小值点慢慢的向外扩展,然后知道两个盆地的水汇合,汇合处就是我们需要的分水岭。

从下图可以直观理解一下,首先这三块区域都含有极小值点 在这里插入图片描述 然后逐渐填充就能获得分水岭(即分界线) 在这里插入图片描述 得到分界线就能完成图像分割: 在这里插入图片描述

二、源代码 clear, close all;clc;%1.读取图像并求取图像的边界。rgb = imread('tree.jpeg');%读取原图像I = rgb2gray(rgb);%转化为灰度图像figure; subplot(121)%显示灰度图像imshow(I)text(732,501,'Image courtesy of Corel','FontSize',7,'HorizontalAlignment','right')hy = fspecial('sobel');%sobel算子,应用sobel算子锐化图像hx = hy';Iy = imfilter(double(I), hy, 'replicate');%滤波求y方向边缘Ix = imfilter(double(I), hx, 'replicate');%滤波求x方向边缘gradmag = sqrt(Ix.^2 + Iy.^2);%求摸subplot(122); imshow(gradmag,[]), %显示梯度title('Gradient magnitude (gradmag)')%2. 直接使用梯度模值进行分水岭算法:(往往会存在过的分割的情况,效果不好)L = watershed(gradmag);%直接应用分水岭算法Lrgb = label2rgb(L);%转化为彩色图像figure; imshow(Lrgb), %显示分割后的图像title('Watershed transform of gradient magnitude (Lrgb)')%过分割现象%3.分别对前景和背景进行标记:本例中使用形态学重建技术对前景对象进行标记,首先使用开操作,开操作之后可以去掉一些很小的目标。%开和闭这两种运算可以除去比结构元素小的特定图像细节,同时保证不产生全局几何失真。%开运算可以把比结构元素小的突刺滤掉,切断细长搭接而起到分离作用;%闭运算可以把比结构元素小的缺口或孔填充上,搭接短的间断而起到连接作用。se = strel('disk', 4);%圆形结构元素,STREL('disk',R,N),R is the specified radius, When N is greater than 0, the disk-shaped structuring %element is approximated by a sequence of NIo = imopen(I, se);%形态学开操作figure; subplot(121)imshow(Io), %显示执行开操作后的图像title('Opening (Io)')Ie = imerode(I, se);%对图像进行腐蚀,基本参数:待处理的输入图像以及结构元素对象Iobr = imreconstruct(Ie, I);%形态学重建subplot(122); imshow(Iobr), %显示重建后的图像title('Opening-by-reconstruction (Iobr)')Ioc = imclose(Io, se);%形态学关操作,首先膨胀,然后腐蚀,两个操作使用同样的结构元素figure; subplot(121)imshow(Ioc), %显示关操作后的图像title('Opening-closing (Ioc)')Iobrd = imdilate(Iobr, se);%对图像进行膨胀,基本参数:待处理的输入图像和结构元素对象。Iobrcbr = imreconstruct(imcomplement(Iobrd), ...imcomplement(Iobr));%形态学重建Iobrcbr = imcomplement(Iobrcbr);%图像求反subplot(122); imshow(Iobrcbr), %显示重建求反后的图像,figure4title('Opening-closing by reconstruction (Iobrcbr)')%As you can see by comparing Iobrcbr with Ioc, %reconstruction-based opening and closing are more %effective than standard opening and closing at removing %small blemishes without affecting the overall %shapes of the objects. Calculate the regional maxima %of Iobrcbr to obtain good foreground markers. fgm = imregionalmax(Iobrcbr);%局部极大值figure; imshow(fgm), %显示重建后局部极大值图像,figure5title('Regional maxima of opening-closing by reconstruction (fgm)')I2 = I; %前景标记图与原图叠加I2(fgm) = 255;%局部极大值处像素值设为255figure; imshow(I2), %在原图上显示极大值区域,figure6title('Regional maxima superimposed on original image (I2)')se2 = strel(ones(3,3));%结构元素fgm2 = imclose(fgm, se2);%关操作fgm3 = imerode(fgm2, se2);%腐蚀fgm4 = bwareaopen(fgm3, 20);%开操作I3 = I;I3(fgm4) = 255;%前景处设置为255figure; subplot(121)imshow(I3)%显示修改后的极大值区域,figure7title('Modified regional maxima')bw = im2bw(Iobrcbr, graythresh(Iobrcbr));%转化为二值图像subplot(122); imshow(bw), %显示二值图像,figure7title('Thresholded opening-closing by reconstruction')%4. 进行分水岭变换并显示:D = bwdist(bw);%计算距离DL = watershed(D);%分水岭变换bgm = DL == 0;%求取分割边界 三、运行结果

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

四、备注

完整代码或者代写添加QQ912100926 往期回顾>>>>>> 【图像压缩】图像处理教程系列之图像压缩【Matlab 074期】 【图像分割】图像处理教程系列之图像分割(一)【Matlab 075期】 【图像分割】图像处理教程系列之图像分割(二)【Matlab 076期】 【模式识别】银行卡号之识别【Matlab 077期】 【模式识别】指纹识别【Matlab 078期】 【图像处理】基于GUI界面之DWT+DCT+PBFO改进图像水印隐藏提取【Matlab 079期】 【图像融合】CBF算法之图像融合【Matlab 080期】 【图像去噪】自适应形态学之图像去噪【Matlab 081期】 【图像增强】DEHAZENET和HWD之水下去散射图像增强【Matlab 082期】 【图像增强】PSO寻优ACE之图像增强【Matlab 083期】 【图像重建】ASTRA算法之图像重建【Matlab 084期】 【图像分割】四叉树之图像分割【Matlab 085期】 【图像分割】心脏中心线之提取【Matlab 086期】 【图像识别】SVM植物叶子之疾病检测和分类【Matlab 087期】 【图像识别】基于GUI界面之模板匹配手写数字识别系统【Matlab 088期】 【图像识别】基于GUI界面之不变矩的数字验证码识别【Matlab 089期】 【图像识别】条形码识别系统【Matlab 090期】 【图像识别】基于GUI界面RGB和BP神经网络之人民币识别系统【Matlab 091期】 【图像识别】CNN卷积神经网络之验证码识别【Matlab 092期】 【图像分类】极限学习分类器之对遥感图像分类【Matlab 093期】 【图像变换】DIBR-3D之图像变换【Matalb 094期】 【图像分割】模糊聚类算法之FCM图像分割【Matlab 095期】 【模式识别】银行监控系统之人脸识别【Matlab 096期】 【模式识别】基于GUI界面之疲劳检测系统【Matlab 097期】 【图像识别】国外车牌识别【Matlab 098期】 【图像分割】最大类间方差法(otsu)之图像分割【Matlab 099期】 【图像分割】直觉模糊C均值聚类之图像分割IFCM【Matlab 100期】 【图像分割】基于matlab形态学重建和过滤改进FCM算法(FRFCM)之图像分割【Matlab 101期】 【图像增强】局部对比度增强CLAHE算法之直方图增强【Matlab 102期】 【图像融合】Frequency Partition之图像融合【Matlab 103期】 【图像评价】SVM之图像无参考质量评价【Matlab 104期】 【图像边缘检测】最小二乘法用于椭圆边缘检测【Matlab 105期】 【图像加密】基于GUI界面之混沌系统图像加密解密【Matlab 106期】 【图像配准】SIFT算法之图像配准【Matlab 107期】 【图像分割】随机游走算法用于图像分割【Matlab 108期】 【图像分割】形态学重建和过滤改进FCM算法(FRFCM)用于图像分割【Matlab 109期】 【图像分割】图像分割IFCM之直觉模糊C均值聚类【Matlab 110期】 【图像增强】区域相似变换函数与蜻蜓算法之灰度图像增强【Matlab 111期】 【图像直线拟合】最小二乘法之图像直线拟合【Matlab 112期】 【图像去雾】暗通道之图像去雾【Matlab 113期】 【图像识别】基于matlab GUI界面之路面裂缝识别【Matlab 114期】 【图像识别】身份证号码之识别【Matlab 115期】 【图像聚类】FCM和改进之FCM脑部CT图像聚类【Matlab 116期】 【图像评价】CCF算法之图像质量评价【Matlab 117期】 【图像分割】蚁群优化模糊聚类之图像分割【Matlab 118期】 【模式识别】基于GUI界面之水果检测系统【Matlab 119期】 【模式识别】基于GUI界面之水果分类系统【Matlab 120期】 【模式识别】基于GUI界面之水果分级系统【Matlab 121期】 【模式识别】人脸识别之检测脸、眼、鼻子和嘴【Matlab 122期】 【图像处理】基于 GUI界面之图像加解密【Matlab 124期】 【模式识别】基于GUI界面BP网络之手写体大写字母识别【Matlab 125期】 【图像分割】基于GUI界面之医学影像分割【Matlab 126期】 【图频处理】基于GUI界面之环图像处理与音乐播放系统【Matlab 127期】 【图像隐藏】基于Laguerre 变换之图像隐藏【Matlab 128期】 【图像处理】基于dwt函数之实现二维小波变换【Matlab 129期】 【图像处理】分形插值算法之调换图片【Matlab 130期】 【图像边缘检测】基于GUI界面之图像边缘检测系统【Matlab 131期】 【图像分割】基于GUI界面之彩色图像分割【Matlab 132期】 【图像去噪】基于GUI界面之图像滤波去噪【Matlab 133期】 【图像几何运算】基于GUI界面之图像几何运算系统【Matlab 134期】 【图像处理】基于GUI界面之图像处理系统【Matlab 135期】 【图像识别】基于matlab之细胞识别和边缘检测【Matlab 136期】 【模式识别】反馈神经Hopfield的数字识别【Matlab 172期】 【模式识别】指纹图像细节特征提取 【Matlab 173期】 【图像分割】RGB HSV YCbCr Lab颜色空间人脸检测之图像分割【Matlab 174期】 【图像压缩】小波变换之图像压缩【Matlab 175期】 【模式识别】基于GUI界面的火灾检测【Matlab 230期】 【模式识别】基于Hough变换的答题卡识别【Matlab 231期】 【模式识别】二值膨胀差分和椒盐滤波之教室内人数识别系统【Matlab 232期】 【小波变换】基于GUI界面DWT与SVD算法的数字水印 【Matlab 233期】 【模式识别】基于GUI界面的指针式表盘识别【Matlab 234期】 【模式识别】基于Hough变换图片车道线检测 【Matlab 235期】 【图像分割】粒子群优化T熵图像分割【Matlab 236期】 【图像分割】粒子群优化指数熵图像分割【Matlab 237期】 【图像分割】粒子群优化指数熵图像分割【Matlab 238期】 【模式识别】基于GUI贝叶斯最小错误率手写数字识别【Matlab 239期】 【模式识别】PCA手写数字识别【Matlab 240期】 【模式识别】特征匹配的英文印刷字符识别【Matlab 241期】 【模式识别】知识库的手写体数字识别【Matlab 242期】 【模式识别】银行卡数字识别【Matlab 243期】 【边缘检测】插值法亚像素边缘检测【Matlab 248期】 【图像识别】表情检测【Matlab 288期】 【图像检测】LSD直线检测【Matlab 289期】 【图像融合】红外与可见光的融合与配准算法【Matlab 290期】 【图像识别】帧差法跌倒检测【Matlab 291期】 【图像识别】组合BCOSFIRE过滤器进行墙体裂缝识别【Matlab 292期】 【模式识别】中值滤波和二值化的跌倒检测【Matlab 293期】 【图像隐写】DCT的图像隐写【Matlab 294期】 【图像隐写】LSB的图像隐写提取【Matlab 295期】 【图像隐写】高斯模型的JPEG图像隐写【Matlab 296期】 【图像隐写】图像自适应隐写算法wow【Matlab 297期】 【模式识别】基于GUI SVM和PCA的人脸识别【Matlab 298期】 【视频识别】轨迹方法行为识别【Matlab 299期】 【模式识别】基于GUI HSV和RGB模型水果分类【Matlab 300期】 【图像处理】基于GUI数字图像处理平台【Matlab 301期】 【图像分割】视网膜图像分割【Matlab 302期】 【模式识别】k-means聚类的手势识别【Matlab 303期】 【图像处理】Hough变换的人眼虹膜定位【Matlab 304期】 【图像处理】Kalman滤波的目标跟踪【Matlab 305期】 【图像分割】GAC水平集方法实现图像分割【Matlab 306期】

https://www.shan-machinery.com