测量二进制位图线中的噪声

时间:2013-11-14 17:51:24

标签: graphics graph bitmap computer-vision

我有一个带有一组边(线)的二值化位图,类似于下图所示的边

enter image description here

  1. 光滑而直的段。
  2. 具有高频噪声的直线段,非连接元素(浮动像素),有时会损坏。
  3. 平滑线,方向有两个重要变化。
  4. 在方向和高频噪声方面有两个重要变化的片段。
  5. 这些边缘是图像上某些区域的边界,我需要测量这些边缘的质量(用于分割目的)。此测量应返回2个因素:

    • 高频噪音
    • 某个细分市场方向发生重大变化。

    因此,对于上面的示例,测量应该返回:

    1. 低频高噪音 - 0次变化。
    2. 高频噪声 - 0次变化。
    3. 低频高噪音 - 2次变化。
    4. 高频噪声 - 2次变化。
    5. 对于每个给定的图像,已知哪些像素属于每个片段。 我没有连接元素(像素)的图表,只有位图。尽可能避免创建一个。

      算法应该很快,所以速度比准确性更重要(合理的近似值可以)

      我可以使用哪种方法来执行此类测量?

1 个答案:

答案 0 :(得分:1)

我只对噪音测量有所了解。

我假设只有一个段的位图图像,图像有N个白色像素,i个像素的坐标(行,列)为(r[i],c[i])i1转到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 )

现在您必须将NN_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