第六章 图像分割
实例:使用形态学分水岭算法分割灰度图像
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')