cv小白上路,请多指教
没思路,参考了一下这个答案 https://ww2.mathworks.cn/matlabcentral/answers/43506-polygon-width-and-centerline
并结合了这个https://blog.csdn.net/yangyangyang20092010/article/details/51541940
虽然不知道为什么这样做,先找找这几个函数的意思吧
bwmorph
https://ww2.mathworks.cn/help/images/ref/bwmorph.html#bui7adf-1-n
Morphological operations on binary images (二值图像的形态学运算)
主要的两个用法有:
其中BW是指二值化后的图像;operation有很多参数,详看上方链接;n是指执行该操作(operation)的次数
其中operation中的‘skel’的例子以及解释如下:
使用n=inf,移除对象边界上的像素,但不允许对象分离。剩余的像素构成图像骨架。
测试图像:test.bmp
bwmorph(BW, 'skel', inf) 后得到 图形骨架
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 的索引” ;
主要的用法有:
例子:
顺便研究了一下IDX中的7和19是怎么来的:即bw中的1所在的索引(第7个 和 第19个)
取反BW:~BW 后
Dist_Img = bwdist(~BW); 计算 “取反的Bw” 的 “到 距离最近的1 的距离”; 图片中白色区域为1,故得到的图片中~BW为1的区域应该得到0(下图中原来白色的区域变为了黑色);~BW黑色(0)的区域里白色(1)区域越近,得到的欧几里得距离越小,因此Dist_Img中~BW离白色(1)区域越近的地方就越暗(离最近的1的欧几里得距离越小),越远的地方越亮(离最近的1的欧几里得距离越大)。
再用Dist_Img点乘skeletonizedImage (CenLine_Img = Dist_Img .* single(skeletonizedImage);)得到CenLine_Img
在最后对得到的centerline(即CenLine_Img )进行二值化