大家都知道对图像完成中值滤波、边缘检测要通过邻域处理,我的问题是假设图像的像素数据已保存为一个二维数组,这时对图像边界的像素邻域处理的话,会出现越界的问题。比如说邻域大小为3*3,对a(1,0)这个元素来说,会取到a(1,-1)
及a(0,-1)这样的元素,于是发生了越界。我已知的解决方法是干脆不对边界元素处理,只从a(1,1)开始处理。这样的方法在模板宽度较小时还可使用,但当模板大小很大甚至为30*30时是会出问题的。我听老师说还有另外两种方法可以解决:1.先对图像放大2.对边界上复制邻近的元素。具体我也没听太懂,有人能说的具体一点吗?

解决方案 »

  1.   

    这种问题,一般都是这样处理:
    For Y = 0 To Height - 1
        For X = 0 To Width - 1
            For J = -Radius To Radius
                YY = J + Y
                If YY < 0 Then
                    YY = 0
                ElseIf YY >= Height Then
                    YY = Height - 1
                End If
                For I = 0 To Width - 1
                    XX = I + J
                    If XX < 0 Then
                        XX = 0
                    ElseIf XX >= Width Then
                        XX = Width - 1
                    End If
                    
                    '然后这里的算法就是访问 类似这样的图像数据
                    'ImageData(XX,YY).Red  /ImageData(XX,YY).Green  /ImageData(XX,YY).Blue
                    
                    
                Next
            Next
        Next
    Next
      

  2.   

    上面的写错了点,应该是这样
    For Y = 0 To Height - 1
        For X = 0 To Width - 1
            For J = -Radius To Radius
                YY = J + Y
                If YY < 0 Then
                    YY = 0
                ElseIf YY >= Height Then
                    YY = Height - 1
                End If
                For I = -Radius To Radius
                    XX = I + X
                    If XX < 0 Then
                        XX = 0
                    ElseIf XX >= Width Then
                        XX = Width - 1
                    End If
                    
                    '然后这里的算法就是访问 类似这样的图像数据
                    'ImageData(XX,YY).Red  /ImageData(XX,YY).Green  /ImageData(XX,YY).Blue
                    
                    
                Next
            Next
        Next
    Next
    就是超过范围的约束到范围边缘,当然从编程方式上来说,上述方式是低效的。
      

  3.   

    一般图像处理都存在边界问题,一般的处理方法:
    1.根据掩膜的size大小,四周的size/2不处理,直接复制原图数值;
    2.根据掩膜size,四周外放size/2,然后按照1处理,最后crop原图位置