MATLAB控制标记符的分水岭分割

% MATLAB实现分水岭算法如下(直接对梯度使用分水岭算法和经过开闭运算相对比) 
%1.读取图像并求取图像的边界。 
load('E:\实验数据\梯田法\重复序列值后\Rnm_2_num1200.mat');
I=Rnm_2_num;
hy = fspecial('sobel');%sobel算子 
hx = hy'; 
Iy = imfilter(I, hy, 'replicate');%滤波求y方向边缘 
Ix = imfilter(I, hx, 'replicate');%滤波求x方向边缘 
gradmag = sqrt(Ix.^2 + Iy.^2);%求摸 
L = watershed(gradmag);%直接应用分水岭算法 
Lrgb = label2rgb(L);%转化为彩色图像 
figure(1); 
imshow(Lrgb), %显示分割后的图像 
title('直接使用梯度模值进行分水岭算法');
%3.分别对前景和背景进行标记:本例中使用形态学重建技术对前景对象进行标记,首先使用开操作,开操作之后可以去掉一些很小的目标。 
se = strel('disk', 3);%圆形结构元素 
Io = imopen(I, se);%形态学开操作 
%开运算重构
Ie = imerode(I, se);%对图像进行腐蚀 
Iobr = imreconstruct(Ie, I);%形态学重建
% Ioc = imclose(Io, se);%形态学关操作 
% Iobrd = imdilate(Iobr, se);%对图像进行膨胀 
% Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));%形态学重建 
% Iobrcbr = imcomplement(Iobrcbr);%图像求反 
%闭运算重构
Iobrc = imcomplement(Iobr);
Iobrce = imerode(Iobrc, se); 
Iobrcbr = imcomplement(imreconstruct(Iobrce, Iobrc));%图像求反 
%局部极大值及其平滑处理
%fgm = imregionalmax(Iobrcbr);%局部极大值 
fgm = imregionalmin(Iobrcbr);%局部极小值 
I2 = I; 
I2(fgm) = 255;%局部极大值处像素值设为255 
se2 = strel(ones(5,5));%结构元素 
fgm2 = imclose(fgm, se2);%关操作 
fgm3 = imerode(fgm2, se2);%腐蚀 
fgm4 = bwareaopen(fgm3, 30);%开操作 
I3 = I; 
I3(fgm4) = 255;%前景处设置为255 
bw = im2bw(Iobrcbr, graythresh(Iobrcbr));%转化为二值图像 
%4. 进行分水岭变换并显示: 
%D = bwdist(bw);%计算距离 
D = bwdist(fgm4);%计算距离 
DL = watershed(D);%分水岭变换 
bgm = DL == 0;%求取分割边界 
%根据强制最小技术修改灰度级梯度图像
%gradmag2 = imimposemin(gradmag, bgm | fgm4);%置最小值 
gradmag2 = imimposemin(gradmag, fgm4 |bgm );%置最小值 
L = watershed(gradmag2);%分水岭变换 
I4 =uint8(I); 
I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;%前景及边界处置255,bgm(外部标记符)未体现
figure(2); 
subplot(121) 
imshow(I4)%突出前景及边界 
title('Markers and object boundaries') 
Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');%转化为伪彩色图像 
subplot(122); imshow(Lrgb)%显示伪彩色图像 
title('Colored watershed label matrix') 
% figure; 
% imshow(I), 
% hold on 
% himage = imshow(Lrgb);%在原图上显示伪彩色图像 
% set(himage, 'AlphaData', 0.3); 
% title('Lrgb superimposed transparently on original image') 
figure(3);
I5=I;
I5(L==0)=255;
imshow(I5,[]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值