去歪斜图像

时间:2019-07-07 10:14:07

标签: python-3.x opencv image-processing

我无法弄清楚这种偏移校正是如何工作的

def deskew(img):
    m = cv2.moments(img)
    if abs(m['mu02']) < 1e-2:
        return img.copy()
    skew = m['mu11']/m['mu02']
    M = np.float32([[1, skew, -0.5*SZ*skew], [0, 1, 0]])
    img = cv2.warpAffine(img,M,(SZ, SZ),flags=affine_flags)
    return img
  

我知道,力矩是形状的定量度量。

     

在图像处理中,这些时刻提供了有关总数的信息   面积或强度,形状的质心和方向   形状。

     

面积或总质量:-

     

零力矩M(0,0)给出总质量或面积。

     

在图像处理中,M(0,0)是所有像素的总和,如果它是二进制图像,则像素的总和就是面积。

     

质心或质心:-当第一矩除以   总质量便得出质心。

     

中心点是形状在屏幕上完美平衡的点   针尖。

     

M(0,1)/ M(0,0),M(1,0)/ M(0,0)

1 个答案:

答案 0 :(得分:0)

我认为您从中获得代码的tutorial所获得的图像非常直观地说明了这一点:

enter image description here

要校正图像,他们在x轴( mu02 )上使用了相对于方差 mu11 skewness。他们使用shear matrix与图像偏斜度成反比,这就是为什么skew = m['mu11']/m['mu02']中的 mu02 mu11 部分被翻转的原因。为了相对于图像顶部的中心而不是(0,0)点进行偏斜校正,他们还使用了translation,在这里您可以得到M[0, 2] = -0.5*SZ*skew