Matlab数字图像处理基础【11】

本文介绍了使用Matlab进行图像分割,特别是通过形态学分水岭算法来分割灰度图像的实例。实验展示了图像分割的效果,包括两个结果图,分别对应不同的图像状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章 图像分割

实例:使用形态学分水岭算法分割灰度图像


clc;
clear;

%使用距离变换的分水岭分割
I = imread('shape.jpg');
%图像二值化
f = im2bw(I, graythresh(I));
figure,subplot(2,3,1),imshow(I),title('原图像');
subplot(2,3,2),imshow(f),title('二值化图像');

%二值化图像求补
fc = ~f;
subplot(2,3,3),imshow(fc),title('二值化图像求补');
%计算距离变换
D = bwdist(fc);
subplot(2,3,4),imshow(D),title('距离变换');

%计算分水岭变换
L = watershed(-D);
%计算分水岭脊线
w = L == 0;
subplot(2,3,5),imshow(w),title('距离变换的负分水岭脊线');

%计算分割结果
g1 = f & ~w;
subplot(2,3,6),imshow(g1),title('分水岭脊线');



%使用梯度的分水岭分割
figure,subplot(2,3,1),imshow(I),title('原图像');
%定义梯度算子
h = fspecial('sobel');
fd = double(I);
%计算梯度幅度图像
g21 = sqrt(imfilter(fd, h, 'replicate') .^ 2 + imfilter(fd, h', 'replicate') .^ 2);
subplot(2,3,2),imshow(g21),title('梯度幅度图像');
%计算分水岭变换
L21 = watershed(g21);
%计算分水岭脊线
wr1 = L21 == 0;
%获取分割结果-首先获取原图像
f21 = I;
%获取分割结果-分割线像素置为255
f21(wr1) = 255;
subplot(2,3,3),imshow(wr1),title('分水岭脊线');
subplot(2,3,4),imshow(f21),title('分割结果');

%使用闭-开运算平滑梯度图像
g22 = imclose(imopen(g21, ones(3, 3)), ones(3, 3));
%计算分水岭变换
L22 = watershed(g22);
%计算分水岭脊线
wr2 = L22 == 0;
%获取分割结果-首先获取原图像
f22 = I;
%获取分割结果-分割线像素置为255
f22(wr2) = 255;
subplot(2,3,5),imshow(wr2),title('平滑梯度后的分水岭脊线');
subplot(2,3,6),imshow(f22),title('平滑梯度后的分割结果');


实验结果:

图1:

图2:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值