som*_*141 6 python image image-processing computer-vision python-imaging-library
过去两天我一直在浏览帖子和例子,我尝试过并经过广泛测试的所有片段都证明是无用的,至少对我来说是这样.
我想要做的是比较从墙上或纸上拍摄的黑色矢量符号(质量类似于人们可能会说的严重扫描图像),并将其与相同或类似符号的电子版本进行比较(将存储在本地和与照片相比).请看一下两个附加的图像,第一个干净的图像(参考图像)是符号的数据库版本,第二个是我在一张纸上制作的蹩脚图画,然后我用我的iPad拍摄.


我希望程序如下:
现在进行比较,我尝试了大量不同的建议方法,但到目前为止,结果非常糟糕.实际上,我可以通过随机图像获得比测试结果更好的比较结果.我已经尝试了基于实际图像的RMS差异比较,它们的边缘(使用ImageFilter.CONTOUR或ImageFilter.FIND_EDGES的'过滤器'功能创建),基于像素的比较,但到目前为止我没有在网上找到任何东西(尽管我不间断的谷歌搜索)或者在StackOverflow这里给了我不错的结果.
我相信问题在于测试图像的嘈杂背景,但我还没有能够证明这一点.有没有人知道是否有办法从这些图像的边缘中获取矢量轮廓,并将它们不仅仅作为图像而是作为图像矢量进行比较?尽管我绘图很糟糕,但我发现这两个图像非常相似,应该可以很好地比较它.
为了获得更好的响应,您需要更好地限制应用程序的范围。这里有一些可能对你有帮助的东西。我想你的“蹩脚的绘图”输入总是与你提供的相似,因为它有很强的边缘,而且它上面的颜色是无关紧要的。为了以简单的方式解决(或者更好地接近解决方案)您的问题,您需要根据尺度不变描述符来描述两个图像。
我的看法:对两个图像进行二值化,计算两者内部的连接组件 (CC) 的数量,丢弃不相关大小的 CC(离中位数太远,平均值,与 stddev 相关,等等,您决定)。您可能需要补充第二步,以便更好地将您的图像与其他输入区分开来,即,您希望您的方法越强大,您需要的判别描述符就越多。在某些时候,您可能还想考虑使用 SVM 或其他机器学习技术。
因此,二值化步骤:执行形态梯度并丢弃弱梯度。如果输入与发布的内容相似,这将非常容易。这是我在强度为 60 时得到的阈值(我还假设您的输入在 [0, 255] 范围内):

我很快尝试了 90 之前的阈值,所有这些都适用于这些图像。裁剪这些很容易,您还可以填充背景和对象:

现在您可以提取白色的连接组件并对其进行分析。在这种情况下,最简单的方法就是计算它们。对于这些输入,我们在“完美”图像中得到 12 个,在“坏”图像中得到 14 个。但是,在“坏”的情况下,我们有 2 个大小为 1 的组件(每个组件中只有一个像素),它们被简单地消除了。还有许多其他方法可以比较连接的组件,但我希望这可以帮助您入门。如果您需要这些任务的代码,我可以将其包含在内。
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |