我正在构建一个iOS应用程序,作为一项关键功能,它结合了图像匹配。问题是我需要识别的图像是小型定向运动的10x10斑块,上面有简单的大文字。它们可以很反光并且在外面(因此光线条件会变化)。样本图像
池中最多会有15种这样的图像,我需要检测的是文本,以便记录用户所在的位置。
我面临的问题是,我使用的图像匹配软件,aurasma和稍微成功的arlabs,他们无法区分它们,因为它们主要用于处理详细的图像。
我需要准确地检测正在扫描的斑块,并考虑使用gps来优化选择,但我找到的唯一可靠方法是让用户手动输入文本。我们基于该产品的主要吸引力之一是能够检测到已经存在的这些图像,而不必设置任何其他材料。
任何人都可以建议一个可以工作的软件(就像iOS友好一样)或者一种对用户有效和互动/愉悦的检测方法。
示例环境: http://www.orienteeringcoach.com/wp-content/uploads/2012/08/startfinishscp.jpeg
环境可能发生很大变化,基本上可以定位斑块的任何位置;树木繁茂或开阔地区的围栏,墙壁和柱子,但绝大多数都在户外。
答案 0 :(得分:2)
我不是iOs程序员,但我会尝试从算法的角度来回答。基本上,你有一个检测问题(“斑块在哪里?”)和分类问题(“它是哪一个?”)。要求用户将牙菌斑保持在预定义的区域当然是个好主意。这解决了检测问题,这通常比分类问题在资源有限的情况下难以解决。
对于分类,我看到两种选择:
经典的“计算机视觉”路线将是特征提取和分类。 Local Binary Patterns和HOG是已知对移动设备足够快的特征提取器(前者比后者更多),并且它们实现起来并不复杂。但是,分类器并不重要,您可能需要搜索适当的iOs库。
或者,您可以尝试对图像进行二值化,即将像素分类为“板”/白色或“文本”/黑色。然后,您可以使用容错相似性度量来比较二值化图像和斑块的二值化参考图像。 chamfer distance measure是一个很好的候选人。它基本上归结为比较两个二值化图像的distance transforms。与直接比较二进制图像相比,这更容忍错位。可以预先计算参考图像的距离变换并将其存储在设备上。
就个人而言,我会尝试第二种方法。第二种方法的(非移动)原型相对容易编码和评估,具有良好的图像处理库(OpenCV,Matlab +图像处理工具箱,Python等)。
答案 1 :(得分:1)
我设法找到一个效果很好的解决方案。我还没有完全优化,但我认为它只是调整过滤器,稍后会解释。
最初我尝试设置opencv,但这是非常耗时和陡峭的学习曲线,但它确实给了我一个想法。我的问题的关键是检测图像中的字符并忽略背景,这基本上只是噪音。 OCR的设计正是为了这个目的。
我发现免费的图书馆tesseract(https://github.com/ldiqual/tesseract-ios-lib)易于使用且具有充足的可定制性。起初结果非常随机,但应用锐化和单色滤镜和色彩反转很好地清理文本。接下来,在ui上标出一个目标区域,并用它来剪切要处理的图像矩形。大图像的处理速度很慢,这大大减少了。 OCR过滤器允许我限制允许的字符,并且斑块遵循标准配置,这缩小了准确度。
到目前为止,它已成功使用灰色背景斑块,但我还没有找到适合红色和白色版本的正确过滤器。我的目标是添加颜色检测并消除输入数据类型的需要。