我无法弄清楚这种偏移校正是如何工作的
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)
答案 0 :(得分:0)
我认为您从中获得代码的tutorial所获得的图像非常直观地说明了这一点:
要校正图像,他们在x轴( mu02 )上使用了相对于方差 mu11 的skewness。他们使用shear matrix与图像偏斜度成反比,这就是为什么skew = m['mu11']/m['mu02']
中的 mu02 和 mu11 部分被翻转的原因。为了相对于图像顶部的中心而不是(0,0)点进行偏斜校正,他们还使用了translation,在这里您可以得到M[0, 2] = -0.5*SZ*skew