我有一个带有一组边(线)的二值化位图,类似于下图所示的边
这些边缘是图像上某些区域的边界,我需要测量这些边缘的质量(用于分割目的)。此测量应返回2个因素:
因此,对于上面的示例,测量应该返回:
对于每个给定的图像,已知哪些像素属于每个片段。 我没有连接元素(像素)的图表,只有位图。尽可能避免创建一个。
算法应该很快,所以速度比准确性更重要(合理的近似值可以)
我可以使用哪种方法来执行此类测量?
答案 0 :(得分:1)
我只对噪音测量有所了解。
我假设只有一个段的位图图像,图像有N
个白色像素,i
个像素的坐标(行,列)为(r[i],c[i])
, i
从1
转到N
。
计算段bounding box的高度和宽度:边界框是一个矩形,边长平行于x,y框架;
是边界框width = c_max - c_min
它有
height = r_max - r_min
其中:
c_min
是从c[i]
到i
1
N
的最小值
c_max
是从c[i]
到i
1
N
的最大值
r_min
是从r[i]
到i
1
N
的最小值
r_max
是从r[i]
到i
1
N
的最大值
我希望没有噪音的线由大约等于边界框对角线长度的像素组成:
N_diagonal = sqrt( width*width + height*height )
现在您必须将N
与N_diagonal
进行比较:如果N/N_diagonal
接近1,则噪音较低,N/N_diagonal
远离1,则越高噪声。如果N/N_diagonal
非常高,那么与表示线所需的最小像素数相比,您会有很多白色像素。另一方面,如果N/N_diagonal
非常低,则图像上只有一些白色像素,根本没有任何片段。因此,基本上您需要两个阈值,您可以使用可用图像进行一些实验;我会从以下内容开始:
N/N_diagonal < 0.95
:像素不足
0.95 <= N/N_diagonal <= 1.05
:低噪音
1.05 < N/N_diagonal
:高噪音
对于算法的时间性能:在我看来算法是O(N
)来查找边界框的宽度和高度,然后你有一些浮点运算来计算对角线和噪音测量。
如果对角线近似值不够,那么您可以更省力地获得更好的估算,例如查看Bresenham's line algorithm。