《学习篇:Matlab 不规则物体中心线的提取 方法一》

时间:2024-03-29 18:30:23

cv小白上路,请多指教

 

没思路,参考了一下这个答案 https://ww2.mathworks.cn/matlabcentral/answers/43506-polygon-width-and-centerline

并结合了这个https://blog.csdn.net/yangyangyang20092010/article/details/51541940

《学习篇:Matlab 不规则物体中心线的提取 方法一》

《学习篇:Matlab 不规则物体中心线的提取 方法一》

 

 

虽然不知道为什么这样做,先找找这几个函数的意思吧

 

bwmorph

https://ww2.mathworks.cn/help/images/ref/bwmorph.html#bui7adf-1-n

Morphological operations on binary images   (二值图像的形态学运算)

主要的两个用法有:

《学习篇:Matlab 不规则物体中心线的提取 方法一》

其中BW是指二值化后的图像;operation有很多参数,详看上方链接;n是指执行该操作(operation)的次数

其中operation中的‘skel’的例子以及解释如下:

《学习篇:Matlab 不规则物体中心线的提取 方法一》

使用n=inf,移除对象边界上的像素,但不允许对象分离。剩余的像素构成图像骨架。

 

 

测试图像:test.bmp

《学习篇:Matlab 不规则物体中心线的提取 方法一》

bwmorph(BW, 'skel', inf) 后得到 图形骨架

《学习篇:Matlab 不规则物体中心线的提取 方法一》

 

 

 

bwdist

https://ww2.mathworks.cn/help/images/ref/bwdist.html

Distance transform of binary image    (二值图像的距离变换)

D = bwdist(BW)  computes the Euclidean distance transform of the binary image BW. For each pixel in BW, the distance transform assigns a number that is the distance between that pixel and the nearest nonzero pixel of BW.

其中参数 D 按照翻译和理解,应该是返回一个和BW一样大小的矩阵,内容为“到  距离最近的1  的距离”(怕我自己再看的时候断句不清楚,特意用空格隔开);

IDX 是返回一个和BW一样大小的矩阵,内容为“最近的 1 的索引” ;

主要的用法有:

《学习篇:Matlab 不规则物体中心线的提取 方法一》

例子:

《学习篇:Matlab 不规则物体中心线的提取 方法一》

 

顺便研究了一下IDX中的7和19是怎么来的:即bw中的1所在的索引(第7个 和 第19个)

 

 

取反BW:~BW 后

《学习篇:Matlab 不规则物体中心线的提取 方法一》

 

Dist_Img = bwdist(~BW);  计算 “取反的Bw”   的   “到 距离最近的1 的距离”; 图片中白色区域为1,故得到的图片中~BW为1的区域应该得到0(下图中原来白色的区域变为了黑色);~BW黑色(0)的区域里白色(1)区域越近,得到的欧几里得距离越小,因此Dist_Img中~BW离白色(1)区域越近的地方就越暗(离最近的1的欧几里得距离越小),越远的地方越亮(离最近的1的欧几里得距离越大)。

《学习篇:Matlab 不规则物体中心线的提取 方法一》

 

再用Dist_Img点乘skeletonizedImage (CenLine_Img = Dist_Img .* single(skeletonizedImage);)得到CenLine_Img

《学习篇:Matlab 不规则物体中心线的提取 方法一》

 

在最后对得到的centerline(即CenLine_Img )进行二值化

《学习篇:Matlab 不规则物体中心线的提取 方法一》