Graphics 测量二进制位图行中的噪声

Graphics 测量二进制位图行中的噪声,graphics,graph,bitmap,computer-vision,Graphics,Graph,Bitmap,Computer Vision,我有一个二值化位图,它有一组类似于下图所示的边(线) 平滑而直的部分 具有高频噪声、非连接元素(浮动像素)和有时断裂的直线段 方向有两个重要变化的平滑线 方向和高频噪声有两个重要变化的段 这些边是图像上某些区域的边界,我需要测量这些边的质量(用于分割目的)。此测量应返回2个因素: 高频噪声 在某一段上的方向发生重大变化 因此,对于上述示例,测量值应返回: 低高频噪声-0次变化 高频噪声-0次变化 低高频噪声-2次变化 高频噪声-2次变化 对于每个给定的图像,已经知道哪些像素属于每个片段。

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

  • 平滑而直的部分
  • 具有高频噪声、非连接元素(浮动像素)和有时断裂的直线段
  • 方向有两个重要变化的平滑线
  • 方向和高频噪声有两个重要变化的段
  • 这些边是图像上某些区域的边界,我需要测量这些边的质量(用于分割目的)。此测量应返回2个因素:

    • 高频噪声
    • 在某一段上的方向发生重大变化
    因此,对于上述示例,测量值应返回:

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

    算法应该是快速的,因此速度比精度更重要(合理的近似值就可以了)


    我可以使用什么样的方法来进行这种测量?

    我只知道噪声测量

    我假设有一个只有一段的位图图像,图像有
    N
    白色像素,
    I
    -第个像素的坐标(行、列)是
    (r[I],c[I])
    I
    1
    变为
    N

    计算段的高度和宽度:边界框是一个矩形,边平行于x,y框架;边界框已被删除

    width = c_max - c_min
    
    而且它已经

    height = r_max - r_min
    
    其中:

    c_min
    i
    c[i]
    的最小值,从
    1
    N

    c_max
    i
    c[i]
    的最大值,从
    1
    N

    r\u min
    i
    r[i]
    的最小值,从
    1
    N

    r\u max
    i
    r[i]
    的最大值,从
    1
    N

    我期望没有噪声的线由大致等于边界框对角线长度的若干像素组成:

    N_diagonal = sqrt( width*width + height*height )
    
    现在,您必须将
    N
    N\u diagonal
    进行比较:如果
    N/N\u diagonal
    接近1,则噪声越低,
    N/N\u diagonal
    离1越远,噪声越高。如果
    N/N\u diagonal
    非常高,则与表示线条所需的最小像素数相比,您有许多白色像素。另一方面,如果
    N/N_diagonal
    非常低,则图像上可能只有一些白色像素,而没有任何片段。所以基本上你需要两个阈值,你可以通过一些实验来调整你的可用图像;我将从以下内容开始:

    N/N\u对角线<0.95
    :像素不够


    0.95我只想到了噪声测量

    我假设有一个只有一段的位图图像,图像有
    N
    白色像素,
    I
    -第个像素的坐标(行、列)是
    (r[I],c[I])
    I
    1
    变为
    N

    计算段的高度和宽度:边界框是一个矩形,边平行于x,y框架;边界框已被删除

    width = c_max - c_min
    
    而且它已经

    height = r_max - r_min
    
    其中:

    c_min
    i
    c[i]
    的最小值,从
    1
    N

    c_max
    i
    c[i]
    的最大值,从
    1
    N

    r\u min
    i
    r[i]
    的最小值,从
    1
    N

    r\u max
    i
    r[i]
    的最大值,从
    1
    N

    我期望没有噪声的线由大致等于边界框对角线长度的若干像素组成:

    N_diagonal = sqrt( width*width + height*height )
    
    现在,您必须将
    N
    N\u diagonal
    进行比较:如果
    N/N\u diagonal
    接近1,则噪声越低,
    N/N\u diagonal
    离1越远,噪声越高。如果
    N/N\u diagonal
    非常高,则与表示线条所需的最小像素数相比,您有许多白色像素。另一方面,如果
    N/N_diagonal
    非常低,则图像上可能只有一些白色像素,而没有任何片段。所以基本上你需要两个阈值,你可以通过一些实验来调整你的可用图像;我将从以下内容开始:

    N/N\u对角线<0.95
    :像素不够


    0.95这个问题非常广泛。你能缩小范围吗?我不这么认为,我只需要在任意位图边缘上测量两个参数:)这个问题真的很广泛。你能缩小范围吗?我不这么认为,我只需要在任意位图边缘上测量两个参数:)我喜欢这种方法,它足够简单。请注意,如果假设直线为4-连接,则N_对角线应等于边界框上任何两个相对角之间的曼哈顿距离;如果直线为8-连接,则N_对角线应等于框的最长边。@xocatzin谢谢您提供的信息!也许你可以把N_对角线等于曼哈顿距离和切比雪夫距离的平均值。我喜欢这种方法,它很简单。请注意,如果假定直线为4-c,则N_对角线应等于边界框上任何两个相对角之间的曼哈顿距离