我是Swift和图像处理的新手,但我没有找到任何程序来做我想要的。我有几千页问卷,但我使用的OMR免费软件(光学标记识别)无法检测到这些问题。这是因为调查问卷由我或研究中的参与者印制,产生不同的图像(比例和旋转)。纠正图像是不够的。幸运的是,每页顶部都有一条水平线。所以,算法看起来像这样:
我需要你帮助完成步骤3a-3b。对于步骤3c,我应该使用Canny边缘检测器,然后使用Hough变换吗?
任何想法都会受到赞赏。
----编辑----
这是描述问题的图像。在上部(患者#1),顶部水平线的坐标是(294,242)至(1437,241)。在下部(患者#2)中,顶部水平线的坐标是(299,230)至(1439,230)。这似乎是一个小差异,但OMR查看具有固定坐标的ROI(即框)。在其他扫描图像中,差异可能更大,顶线可能不是水平的(例如(X1,Y1)=(320,235)和(X2,Y2)=(1480,220))。
我的想法是获得一个复选框的模板(OMR这样做)和顶线的坐标一次永远(我可以使用Paint或其他任何东西)。然后在运行OMR之前将所有图像对齐到此模板(使用它们的顶行)。可能需要缩放,旋转和翻译。换句话说,所有图像都应完全可堆叠在模板图像上,以便OMR正确执行...
---编辑12月26日---
我已经将OpenCV的概率Hough变换转换为Swift(open cpp code from GitHub。不幸的是,检测到的段太短(即没有捕获整个线段)。我想知道:在Hough变换之前使用Canny边缘检测器在白页上检测黑线的单个段是否有意义?