我想知道比较一组轮廓的最佳策略是什么,实际上是从两张图片中检测到精确边缘的边缘,以便知道哪一对更相似.
我有这个图像:
http://i55.tinypic.com/10fe1y8.jpg
我想知道如何计算出哪一种最适合它:
http://i56.tinypic.com/zmxd13.jpg
(它应该是右边的那个)
无论如何比较整个轮廓?我可以轻松旋转图像,但我不知道使用什么函数来计算右边的参考图像是最合适的.
这是我已经尝试过使用opencv的内容:
matchShapes函数 - 我使用2个灰度图像尝试了这个函数,我总是在每个比较图像中得到相同的结果,并且值似乎是错误的,因为它是0,0002.
所以我对matchShapes有所了解,但我不确定这是正确的假设,是该函数适用于成对的轮廓而不是完整的图像.现在这是一个问题,因为虽然我有想要比较的图像的轮廓,但它们是数百个,我不知道哪些应该"配对".
所以我也尝试将第一个图像的所有轮廓与其他两个轮廓进行迭代比较,但我可能会比较,例如,5的轮廓与两个参考图像的圆形轮廓而不是2个轮廓.
还试过简单的cv :: compare函数和matchTemplate,没有成功.
mev*_*ron 19
那么,为此你有几个选择,取决于你需要多么强大的方法.
对于这些方法,我假设您提供的图像是您正在使用的图像(即,对象已经被分割并且大致相同的比例.此外,您将需要校正旋转(至少以粗略的方式)你可以做一些事情,比如每10,30,60或90度迭代旋转一次比较图像,或者你觉得可以逃脱的任何粗糙度.
例如,
for(degrees = 10; degrees < 360; degrees += 10)
coinRot = rotate(compareCoin, degrees)
// you could also try Cosine Similarity, or even matchedTemplate here.
metric = SAD(coinRot, targetCoin)
if(metric > bestMetric)
bestMetric = metric
coinRotation = degrees
Run Code Online (Sandbox Code Playgroud)
这些解决方案实施起来会更复杂,但可能会产生更强大的分类.
| 归档时间: |
|
| 查看次数: |
16705 次 |
| 最近记录: |