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