我正在做类似这个问题的事情: Matching a curve pattern to the edges of an image
基本上,我在两个图像中有相同的曲线,但两者之间有一些仿射变换。以下是两张图片的示例:
image1的
图像2
因此,为了进入Image2,您可以对Image1应用一些平移,旋转,缩放等。
有谁知道如何解决这种转变?
相位相关不起作用,因为它不仅仅是翻译。光流不起作用,因为没有足够的细节来解决平移,旋转,缩放(它几乎是二进制图像)。我不确定Hough Transforms是否会给我很好的数据。
答案 0 :(得分:2)
我认为某种关键点匹配算法(如筛选或冲浪)也适用于此类数据。 基本思想是在每个图像中找到有限数量的“有趣”关键点,然后成对匹配这些关键点。
以下是使用在线ASIFT演示快速测试您的图像: http://demo.ipol.im/demo/my_affine_sift/result?key=BF9F4E4E006AB5168497709836C39C74#
它可能更适合普通的灰度图像,但它似乎适用于这些数据。看起来这些线条在两条曲线周围连接大致相同的点;将所有这些对插入到OpenCv中的FindHomography函数中,小的差异甚至应该自己出来,并且在两个图像之间得到仿射变换矩阵。
对于您的特定数据,您可能能够提供更好的关键点描述符;也许是检测线端,线交叉和尖角的东西。
或者如何:这是一个更多的工作,但如果你可以将你的路径矢量化为bezier或b-spline,你可以从样条描述符中获得一些自然的关键点。
我不知道任何矢量化库,但是Inkscape有一个基本实现,您可以使用它来测试该方法。
一旦你有一小组描述符而不是一个大的2d位图,你只需要在两个图像之间匹配这些描述符,就像FindHomography一样。
回答评论:
兴趣点仅仅是具有某些特性的小区域。所以这些区域的中心可能是黑色或白色;该算法不专门寻找白色像素或大规模形状,例如曲线。重要的是,线条在两条曲线上连接大致相同的点,至少乍看之下。