camera - 如何选择用于阅读非常小的字体字符的镜头
问题描述
我正在尝试实现一种 OCR / OCV 算法来检查白色背景上的黑色墨水打印文本。文本大小从 3 pt 不等。到 6 点 我首先尝试使用 5 MP 单色相机使用 8 毫米、12 毫米和 16 毫米镜头捕捉图像,但我无法获得清晰的字符。我用 10 MP 相机重复了相同的测试,同时考虑到更高的像素深度会提供更多信息,但我得到了相同的结果。
我不确定,我怎样才能获得更清晰的图像。5 MP / 10 MP 是否足够,以及是否有任何方法可以确定在此类应用中使用的镜头。
检查的 FOV 约为 300 x 250 毫米,我考虑的工作距离约为。400 毫米至 650 毫米。
由于版权问题,我无法发布正在检查的对象的图像。
非常感谢任何帮助或指导。谢谢。
解决方案
这是简单的几何。这是:
3pt =~ 1mm.
假设您希望有 10 个像素来覆盖每个字符,您的 IFOV 需要:
IFOV =~ (font_width / 10) / distance = 0.1 / 650 =~ 0.15 milliradians / pixel.
对于您提到的工作区宽度,水平视野为:
FOV = 2 * atan((300 / 2) / 650) =~ 453 milliradians =~ 26 deg
因此,您需要的最小(水平)传感器分辨率是:
Width = 453 / 0.15 = 3020 pixels.
因此,10MP 传感器应该足够了,而 5MP 传感器可能就足够了。
要选择镜头,请根据上述 FOV 规格和您选择的传感器的格式(宽度、高度),您可以通过相同的简单三角法计算出所需的焦距。最后,在所有可用于您的相机安装的焦距匹配的镜头中,您需要选择一个(a)可以聚焦在感兴趣的距离,并且(b)具有足够的光学传递函数,这样一条线可以在上述 IFOV 中解决。
在实践中,在运行数学并查看目录之后,您最终会得到几个候选镜头。然后我的建议是在做出最终决定之前获取样品并在您的设置上试用它们,特别是使用您将使用的特定照明设备。根据您的特定项目,除了(显然)镜头+传感器组合的成本之外,影响选择的因素可能是尺寸/重量、对环境条件(温度、湿度、振动)的敏感性、可用性和采购交货时间, ETC。
推荐阅读
- spss - 如何合并来自不同列的 SPSS 变量的内容
- git - 无法推送到 Github:gitmodulesParse: could not parse gitmodules blob
- amazon-web-services - Amazon AWS EC2 - 如何限制仅从弹性负载均衡器接收流量?
- java - 如何在 Spark Streaming 中使用 redis?
- azure-active-directory - Azure 活动目录服务
- python - 在 Python 中将潜在的布尔值转换为布尔值,有什么缺点吗?
- javascript - rxjs v6 / redux-observable v1.0.0:操作员不能在史诗中工作
- pandas - 如何使用非唯一多索引向熊猫数据框添加新行
- ruby - 改进我的正则表达式以包含包含小数和百分号的数字
- variables - RobotFramework:变量范围