使用分水岭变换的分割

使用分水岭变换的分割


1、使用距离变换和分水岭变换分割二值图像

(1)代码

%使用距离变换和分水岭变换分割二值图像
clc;
clear all;
close all;
f=imread('0.jpg');
figure;imshow(f);title('原图像');
g=im2bw(f,graythresh(f));   %图像二值化
figure;subplot(2,3,1);imshow(g);title('二值图像');
gc=~g;                      %对图像求补
subplot(2,3,2);imshow(gc);title('二值图像的补');

D=bwdist(gc);    %距离变换
subplot(2,3,3);imshow(D);title('距离变换');

L=watershed(-D);    
subplot(2,3,4);imshow(L);title('分水岭脊线');
w=L==0;
subplot(2,3,5);imshow(w);title('分水岭脊线反向');
g2 = g&-w;
subplot(2,3,6);imshow(g2);title('和二值图像叠加');

(2)结果


2、使用梯度的分水岭分割

(1)代码

%使用梯度的分水岭分割
clc;
clear all;
close all;
f=imread('0.jpg');
figure;imshow(f);title('原图像');

%%
%形态学分水岭变换
h=fspecial('sobel');    %sobel边缘检测
figure;imshow(h);title('sobel');
fd=tofloat(f);          %图像转化为浮点型
g=sqrt(imfilter(fd, h, 'replicate') .^ 2 + imfilter(fd, h', 'replicate') .^ 2);     %计算梯度
figure;imshow(g);title('梯度');
L = watershed(g);   %分水岭线
figure;imshow(L);title('分水岭线');
wr = L == 0;
g2 = imclose(imopen(g, ones(3,3)), ones(3,3));  %对梯度图像形态学闭操作
figure;imshow(g2);title('梯度闭操作后');
L2 = watershed(g2);
figure;imshow(L2);title('分水岭线2');
wr2 = L2 == 0;
f2 = f;
f2(wr2) = 255;
figure;imshow(f2);title('分割结果');

(2)结果



3、控制标记符的分水岭分割

(1)代码

%控制标记符的分水岭分割
clc;
clear all;
close all;
f=imread('0.jpg');
figure;imshow(f);title('原图像');



%%
%形态学分水岭变换
h=fspecial('sobel');    %sobel边缘检测
figure;imshow(h);title('sobel');
fd=tofloat(f);          %图像转化为浮点型
g=sqrt(imfilter(fd, h, 'replicate') .^ 2 + imfilter(fd, h', 'replicate') .^ 2);     %计算梯度
figure;imshow(g);title('梯度');
L = watershed(g);   %分水岭线
figure;imshow(L);title('分水岭线');
wr = L == 0;
figure;imshow(L);title('分水岭线反向');
%%

rm=imregionalmin(g);    %计算图像中所有的局部小区域的位置
%im = imextendedmin(f,h)
%用函数imextendedmin 来得到内部标记符的集合
%,f 是灰度图像,h 是高度阈值,im 是一幅二值图像,im 的前景像素标记了深的局部小区域的位置
im=imextendedmin(f,2);   %计算比近邻点更暗的图像中“低点”集合
fim=f;
fim(im)=175;
figure;imshow(fim);title('fim');
Lim = watershed(bwdist(im)); %计算内部标记符图像im 的距离变换的分水岭变换
em = Lim == 0;  
figure;imshow(Lim);title('Lim');
g2 = imimposemin(g, im | em);

L2 = watershed(g2);
f2 = f;
f2(L2 == 0) = 255;
figure;imshow(f2);title('最终结果');
                        

(2)结果


猜你喜欢

转载自blog.csdn.net/liyuqian199695/article/details/70054092
今日推荐