【发布时间】:2016-05-09 04:22:15
【问题描述】:
我仍然是编码的初学者。我目前正在使用 C/C++ 编写一个程序,该程序正在确定照片中已定义标记(这是一个带有白色周围的黑色圆圈)的像素位置。
我从标记和一个向量中制作了一个 mask,其中包含掩码的每个像素值作为它的元素(使用 Magick++ 我对红色、绿色和蓝色的值求和)。向量包含 aprox。 10 000 个值,因为掩码是 100x100px。我还使用阈值函数来简化图像。
比我做了一个网格,对图片做同样的事情,我想在其中找到标记的坐标。它基本上是一个循环,它遍历图像,当程序知道网格中的像素值时,它会立即将它们与掩码进行比较。主要思想是找到掩码和其中一个网格位置之间的最小差异。
然而,问题在于评估所有网格位置的过程需要大量时间(例如,图像有 1920x1080 像素,因此超过 200 万个向量包含 10000 个值)。我决定循环网格不是每个像素,而是例如每 10 列和行,并且为了从这个过程中获得最佳关联,我选择了使用每个像素循环的区域。但是,这仍然需要很多时间。
我想问你,是否有一些方法可以改进这种方法以获得更好(更快)的结果,或者整个想法不是时间效率高,我应该使用不同的方法。
感谢您的每一个建议!
编辑:该程序将用于处理多个图像,并且所有图像的大小都相同。这是阈值后的图片,标记是大黑点。 Image
【问题讨论】:
-
请说明标记是否有特定位置或可能在任何位置。此外,澄清它是否具有特定大小,可能具有任何大小。此外,如果标记完全覆盖照片上的内容。
-
您是否尝试过使用圆霍夫变换等算法?它可能会限制您最感兴趣的区域,从而使您的方法更快。
-
我想您应该阅读一些有关最先进的模板匹配的内容。它与您所做的类似,但速度非常快。
-
还请澄清图像是否是完全数字的,并且标记肯定会有白色和黑色(如果表示为 8 位深度的 RGB,则表示 0,0,0 和 255,255,255)。
-
使用 GPU。它们是为这种事情而生的。
标签: c++ image-processing position computer-vision magick++