我们打印500个气泡调查,拿回它们,然后以一大批扫描它们,给我们500个PNG图像。
每幅图像在对齐方式上略有不同,但大小和分辨率相同。我们需要配准图像,使它们完全对齐。(下一步是对气泡进行半自动评分)。
如果这些是3D-MRI图像,我可以用一个命令行实用程序来完成;但我没有看到任何这样的工具来对齐扫描的文本文档。
我已经尝试过Image Alignment (Feature Based) using OpenCV中描述的opencv,当它工作时,它会产生爆炸性的结果,但它经常会失败得惊人。这种方法是寻找隐藏在自然场景中的文档,这比我们的情况要困难得多,在我们的情况下,图像只是在2D中旋转和平移,而不是3。
我还研究过imreg_dft,它运行一致,但做得很差--想必dft方法在照片上比在文本文档上更好。
扫描表单的图像配准解决方案是否已经存在?如果不是,正确的方法是什么?Opencv,imreg_dft,还是别的什么?
发布于 2019-07-28 20:59:33
您可以尝试使用答案框的红色轮廓来创建一个蒙版,您可以在其中选择轮廓。我在下面创建了一个示例。您还可以通过为字母创建蒙版,将其反转,然后将其作为蒙版应用来删除蓝色字母。我没有这样做,因为他对出版商的印象是低分辨率的,这引发了问题。我希望你的扫描效果更好。
获得长方体的轮廓后,可以分别对它们进行变换/比较(因为长方体具有不同的大小)。或者,您可以使用最大的轮廓为整个文档创建转换。
然后可以使用minAreaRect查找等高线的角点。contourArea的阈值,以排除噪声/无应答区域。
import cv2
import numpy as np
# load image
img = cv2.imread('Untitled.png')
# convert to hsv colorspace
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of image bachground in HSV
lower_val = np.array([0,0,0])
upper_val = np.array([179,255,237])
# Threshold the HSV image
mask = cv2.inRange(hsv, lower_val, upper_val)
# find external contours in the mask
contours, hier = cv2.findContours(mask, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
# draw contours
for cnt in contours:
cv2.drawContours(img,[cnt],0,(0,255,0),3)
# display image
cv2.imshow('Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
https://stackoverflow.com/questions/57236767
复制相似问题