17.5 分水岭分割算法(3)
来源:百度文库 编辑:神马文学网 时间:2024/05/18 17:46:56
17.5 分水岭分割算法(3)
将图像Iobrcbr使用合适的阈值转化成二值图像,其中淡颜色的值为背景,转化成的二值图像如图17-25右边图像所示。
进行分水岭变换并显示。
代码如下:
- D = bwdist(bw);%计算距离
- DL = watershed(D);%分水岭变换
- bgm = DL == 0;%求取分割边界
- figure; imshow(bgm), %显示分割后的边界
- title('Watershed ridge lines (bgm)')
- gradmag2 = imimposemin(gradmag, bgm | fgm4);%设置最小值
- L = watershed(gradmag2);%分水岭变换
- I4 = I;
- I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;%前景及边界处设置为255
- figure; 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')
从图17-25中可以看出,背景像素是黑色的,但是理想情况下,我们不希望背景标记太靠近目标对象的边缘,可以通过"骨骼化"进行细化,对二值图像的距离进行分水岭变换,然后寻找分水岭的界限,分水岭的界限如图17-26所示。
函数imimposemin可以用来对图像进行修改,使图像在一些特定的区域像素值最小。在本程序中,使用imimposemin函数修改梯度模值图像,使梯度模值图像在标记的前景对象和背景对象中有最小值,然后进行分水岭变换得到矩阵L。
还有一种可视化的技术是在原图像中分别标记前景对象、背景对象和边界。为了使分割的边界更清楚,可以对图像进行膨胀操作,如图17-27左边图像所示。
从图17-27左边图像中可以看出,对前景对象和背景对象标记后再进行分水岭变换比直接在梯度模值图像上进行分水岭变换的效果要好得多。
另外一种显示分割后图像的方法是使用彩色图像显示,使用label2rgb函数将分水岭变换后的图像显示为彩色,如图17-27右边图像所示。
同样也可以在原来图像的基础上,使用透明技术将图像显示为伪彩色图像,如图17-28所示。