分水岭分割

    该篇文章是在老师指导下完成的作业,感谢老师的指导。

    分水岭分割借鉴了形态学理论,是一种新的基于区域的图形分割算法。在该方法中,将一幅图像看成一个地形图,灰度值对应地形的高度值,高度值对应着山峰,低灰度值对应着山谷。水总是朝地势低的地方流动,直到某个局部低洼处,这个低洼处就是盆地,最终所有的水都会处于不停地盆地,盆地之间的山脊称为分水岭。

1、使用距离变换的分水岭分割:

距离变换:每一个像素到最邻近非零值像素的距离。

程序:

clear all;close all;clc
fobrcbr=imread('F:\matlab\MATLAB上机操作\图形\f1.tif');
level=graythresh(uint8(fobrcbr));
g=im2bw(fobrcbr,level);  %用阈值法把平滑后的图像变为二值图像
subplot(221)
imshow(g,[])
title('二值图像')
gc=~g;
subplot(222)
imshow(gc,[])
title('二值图像的补图像')
D=bwdist(gc);   %求二值图像的距离变换
subplot(223)
imshow(D,[])
title('距离变换')
L=watershed(-D);  %对负距离变换图求分水岭变换
w=L==0;  %求出山脊线
subplot(224)
imshow(w,[])
title('负距离变换的分水岭山脊线')
figure(2)
g2=g&~w;  %把黑色山脊线叠加在原图上
imshow(g2,[])

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

梯度大小图沿着物体的边缘有很高的像素值,在其他地方有低的像素值。分水岭变换将导致沿目标边沿的分水岭山脊线。

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

由于噪声和梯度的其他局域不规则性,直接把分水岭变换用于梯度图通常导致过度分割。

使用标记概念控制过度分割的方法:

                      内部标记:在每个感兴趣的目标内。

                      外部标记:在背景内。

L=watershed(D);  %对图求分水岭变换

bwdist函数用于计算元素之间的距离。

[D,L]=bwdist(a)
D表示零元素所在的位置靠近非零元素位置的最短距离;

L则表示在该元素所靠近的最近的非零元的位置。

imcomplement为一个函数的名称,其可以对图像数据进行取反运算(实现底片效果)。

函数imcomplement可近似的把RGB模型转换为CMY模型:cmy_image=imcomplement(rgb_image)

也可以使用该函数将CMY图像转换为RGB图像:rgb_image=imcomplement(cmy_image)


猜你喜欢

转载自blog.csdn.net/revitalise/article/details/80378866