【问题标题】:OMR: evaluate filled circleOMR:评估实心圆
【发布时间】:2017-04-06 08:49:51
【问题描述】:

我正在为试卷实施 OMR 系统。但是在确定实心圆时遇到问题。我已经成功地获得了这些感兴趣的灰度区域。

问题是:
- 由于圆圈中的字母和移动相机拍摄的照片亮度不同,二进制阈值(自适应和固定)和计数非零像素会产生很多错误。
- 还尝试了survey 中描述的技术,它使用一个圆圈的平均灰度值来标记它是否填充,但是当人们用相机拍照时,由于光源不同,图像的亮度并不均匀,我得到了很多错误的结果。
- 人们也不遵守规则,比如我们填满整个圈子,算法在这种情况下也需要稳健。
Sample images
我已经有大约 10 GB 的样本,所以机器学习或其他统计方法可能会有用。
有没有人知道其他方法可以将圆圈归类为实心?

【问题讨论】:

  • 恐怕你的问题太笼统了。有很多方法和许多可能的解决方案,但提供好的推荐需要更多的图像和一些限制。到目前为止,我的回答是:是的,有人知道将圆圈归类为实心的其他方法。
  • @vzhadeyev 使用面积属性检查“寻找轮廓”
  • @JeruLuke,这将为我提供具有某些区域的轮廓数组,我可以从中获得最大的轮廓或检查其中填充像素的数量,但我仍然需要放置像素数的一些固定阈值可以说它是否填充。这是你的意思吗?
  • @vzhadeyev 是的。确定要突出显示的轮廓区域是一种反复试验的方法

标签: opencv computer-vision emgucv optical-mark-recognition


【解决方案1】:

由于这不是一个直截了当的问题,因此需要进行大量调整以使其健壮。但我想建议你一个好的起点。您可以使用它并尝试使其工作。

import numpy as np
import cv2

image_ori = cv2.imread("circle_opt.png")

lower_bound = np.array([0, 0, 0])
upper_bound = np.array([255, 255, 195])
image = image_ori

mask = cv2.inRange(image_ori, lower_bound, upper_bound)
masked_red = cv2.bitwise_and(image, image, mask=mask)

kernel = np.ones((3,3),np.uint8)
closing = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

contours = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
        cv2.CHAIN_APPROX_SIMPLE)[0]
contours.sort(key=lambda x:cv2.boundingRect(x)[0])

print len(contours)
for c in contours:
    (x,y),r = cv2.minEnclosingCircle(c)
    center = (int(x),int(y))
    r = int(r)
    if 10 <= r <= 15:
        cv2.circle(image,center,r,(0,255,0),2)

# cv2.imwrite('omr_processed.png', image_ori)
cv2.imshow("original",image_ori)
cv2.waitKey(0)

我从你分享的图片上的代码中得到的结果是这样的

您可以对这些绿色圆圈补丁应用阈值,然后计算非零值以获取圆圈是否被标记。您可以使用 lower 和 upper_bound 来尝试使解决方案健壮。

希望这会有所帮助!祝你解决问题好运:)

【讨论】:

  • Getting TypeError: 'key' is an invalid keyword argument for this function
  • 这是在 python 2.7 上测试的,尝试一下。或者修改代码以在您使用的版本中工作。
  • 是的,使用相同的环境。不知道为什么它在传递给排序函数时会出现该错误,所以也不知道要纠正什么。在此之前未使用“密钥”。
  • 你可以注释掉那一行。如果只想检查功能,则不需要排序:)
猜你喜欢
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多