MATLAB图像处理学习日记之图像的分水岭算法02

该博客介绍了MATLAB中进行图像处理的步骤,包括使用watershed函数进行分水岭变换,以及对二进制图像进行距离变换。首先,通过watershed函数对图像进行分割,然后计算距离变换,接着调整图像使得分水岭变换的亮像素代表高海拔。最后,将结果转换为RGB图像并显示。示例代码展示了如何处理含有重叠对象的二进制图像。
摘要由CSDN通过智能技术生成

分水岭变换将图像视为浅色像素代表高海拔而深色像素代表低海拔的表面,从而在图像中找到“集水盆地”或“分水岭脊线”。 分水岭变换可用于将感兴趣的连续区域分割为不同的对象。

MATLAB图像处理主要是用到了watershed函数使用方法。

调用格式:

L = watershed(A)
返回一个标签矩阵L,该标签矩阵L标识输入矩阵A的分水岭区域。

L = watershed(A,conn)
指定在分水岭计算中使用的连通性。

close all; clear all; clc;
I=imread('circbw.tif');
J=watershed(I,8);   %分水岭分割
figure; 
subplot(121);imshow(I);     
subplot(122);imshow(J); 

`
在这里插入图片描述
下一个阶段的要求:
01:计算二进制图像补码的距离变换。 输出图像中每个像素的值是该像素与bw最接近的非零像素之间的距离,距离变换生成;
02:然后进一步的,有对距离变换后的图像进行补充,以使分水岭变换的亮像素代表高海拔,而暗像素代表低海拔,实现高低的错落分布;在这里插入图片描述

03:计算分水岭变换。 将ROI以外的像素设置为0。
04:将结果标签矩阵显示为RGB图像。
05:展示出来初步的二维效果。

center1 = -40;
center2 = -center1;
dist = sqrt(2*(2*center1)^2);
radius = dist/2 * 1.4;%距离变换
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius;
bw = bw1 | bw2;
subplot(131);imshow(bw);
title('Binary Image with Overlapping Objects')

D = bwdist(~bw);
subplot(132);imshow(D,[]);
title('Distance Transform of Binary Image')

L = watershed(D);
L(~bw) = 0;
rgb = label2rgb(L,'jet',[.5 .5 .5]);
subplot(133);imshow(rgb);%生成rgb色图
title('Watershed Transform')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海宝7号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值