介绍一个神函数:bwmorph。人生苦短,我还是选matlab吧。
背景:需要把图像中提取出来的粗轮廓“压缩”成一个像素点的细线,即骨骼提取。本来的轮廓粗细不均匀,用图像腐蚀会导致一些点断掉。(注:轮廓内部需要填充)
- 首先是形态学close操作
%openclose
se = strel('disk', 5, 4);
fo = imclose(img, se);
figure(1)
imshow(fo)
strel定义核的形状和大小,关键字‘disk’指圆形核,后面两个数字指核的大小和圆的半径。这个函数还有其他形状的核,但此处目的为了平滑轮廓,所以选圆形核。
- 轮廓骨骼提取
ginf = bwmorph(fo, 'thin', 100);
关键字‘thin’的作用不太清楚,后面有机会再去研究,数字100指迭代次数,可以用‘Inf’代替,迭代次数不同效果也不同。
- 骨刺去除
for k = 1:15
ginf = ginf & ~endpoints(ginf);
end
figure(2)
imshow(ginf)
k也表示迭代次数,该操作可以去除上一部提取的骨骼中的小骨刺。
endpoints函数库中好像没有&