图像处理-将一张图片中的曲线与另一张图片匹配

6
我正在处理类似这个问题的内容:匹配曲线模式到图像边缘 基本上,我有两张图片中相同的曲线,但两者之间存在一些仿射变换。以下是两张图片的示例: enter image description hereImage1 enter image description hereImage2
因此,为了得到Image2,你可以在Image1上应用一些平移、旋转、缩放等操作。
请问是否有人知道如何解决这种转换问题?
相位相关并不适用于非纯平移情况。光流也无法使用,因为没有足够的细节来解决平移、旋转、缩放(它几乎是二进制图像)。我不确定Hough变换是否能给我好的数据。

1
我会尝试使用仿射不变傅里叶描述符;完全跳过霍夫变换;而且我认为对于给定的问题,ASIFT等方法过于复杂。 - mmgp
你是否有其他需要匹配的图像曲线示例,还是只有这一对图像需要解决方案?有一些更简单的技术可以考虑。正如mmgp所提到的,有些算法可能过于复杂,但如果一个算法可以解决这个问题并且可以重复使用于类似的问题中,那么准备好这个解决方案可能是值得的。你的图像处理是否必须在特定时间内完成(10毫秒、100毫秒、1秒)?模拟退火已经应用于类似的问题,并且效果很好,但也许这太过繁重了。 - Rethunk
1个回答

2
我认为像sift或surf这样的关键点匹配算法也可以在这种数据上使用。基本思路是在每个图像中找到有限数量的“有趣”的关键点,然后成对匹配这些关键点。
这是一个在线ASIFT演示对您的图像进行的快速测试: http://demo.ipol.im/demo/my_affine_sift/result?key=BF9F4E4E006AB5168497709836C39C74#

enter image description here

这个方法可能更适用于普通的灰度图像,但是它似乎也适用于这些数据。看起来这些曲线连接的点大致相同;将所有这些点对插入到OpenCv中的FindHomography函数中,小的差异应该会自动消除,然后你就可以得到两个图像之间的仿射变换矩阵。

对于你的特定数据,你可能能够想出更好的关键点描述符;也许是用于检测线段端点、交叉点和锐角的某些东西。

或者试试这个:如果你能将路径向量化为贝塞尔或B样条,你可以从样条描述符中获得一些自然的关键点。
我不知道有哪些向量化库,但Inkscape有一个基本实现,你可以用它来测试这种方法。 一旦你只有一小组描述符而不是一个大的二维位图,你只需要在两个图像之间匹配这些描述符,就像使用FindHomography那样。


评论的回答:
感兴趣的点仅仅是具有某些特性的小区域。因此,这些区域的中心可能是黑色或白色;算法并不专门寻找白色像素或大规模形状,例如曲线。重要的是,线条在两个曲线上大致连接相同的点,至少乍一看是这样。

那个网站看起来很不错。但我无法完全理解这个输出,代码是正确绘制线条还是匹配黑点? - mmgp
嗯,我自己对这个实现并不了解,但我在上面的回答中加入了我所知道的。 - HugoRune
能否通过计算出的匹配将第一张图像转换为第二张图像呢? 如果不能,是否有其他算法/工具可以实现这一点? - Samsky
1
@Samsky 你可以使用openCV的FindHomography函数来找到两个图像之间最佳仿射变换,然后使用WarpAffine或WarpPerspective函数将一个图像转换为另一个图像的近似。 - HugoRune

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接