【问题标题】:Image processing - Match curves from one image to another图像处理 - 将一张图像的曲线匹配到另一张图像
【发布时间】:2013-01-25 21:37:34
【问题描述】:

我正在做类似这个问题的事情: Matching a curve pattern to the edges of an image

基本上,我在两幅图像中有相同的曲线,但两者之间有一些仿射变换。以下是两张图片的示例:

图片1

图片2

所以为了得到Image2,你可以对Image1应用一些平移、旋转、缩放等。

有谁知道如何解决这个转换?

相位相关不起作用,因为它不仅仅是翻译。光流不起作用,因为没有足够的细节来解决平移、旋转、缩放(它几乎是二进制图像)。我不确定 Hough 变换是否会给我提供好的数据。

【问题讨论】:

  • 我会尝试使用仿射不变傅里叶描述符;会完全跳过霍夫;我相信 ASIFT 和公司对于给定的问题是矫枉过正的。
  • 您是否还有其他需要匹配的图像曲线示例,或者这是您需要解决的唯一一对图像?一些更简单的技术浮现在脑海中。正如 mmgp 所提到的,有些算法可能是矫枉过正的,但如果一种算法可以解决这个问题并且可以重复用于类似的问题,那么准备好该解决方案可能是值得的。您的图像处理是否必须在一定时间内(10 毫秒、100 毫秒、1 秒)内完成?模拟退火已应用于类似的问题,并且效果很好,但也许这太繁重了。

标签: image-processing transform


【解决方案1】:

我认为某种关键点匹配算法(如 sift 或 surf)也适用于此类数据。 基本思想是在每个图像中找到有限数量的“有趣”关键点,然后成对匹配这些关键点。

以下是通过在线 ASIFT 演示对您的图像进行的快速测试: http://demo.ipol.im/demo/my_affine_sift/result?key=BF9F4E4E006AB5168497709836C39C74#

它可能更适合普通灰度图像,但它似乎适用于这些数据。看起来这些线连接了两条曲线周围大致相同的点;将所有这些对插入到类似 OpenCv 中的 FindHomography 函数中,小的差异应该会自行消除,并且您会得到两个图像之间的仿射变换矩阵。

对于您的特定数据,您可能能够提出更好的关键点描述符;也许可以检测线端、线交叉点和尖角。

或者这个怎​​么样:这需要更多的工作,但如果您可以将路径矢量化为贝塞尔曲线或 b 样条曲线,您可以从样条曲线描述符中获得一些自然的关键点。
我不知道任何矢量化库,但Inkscape 有一个基本实现,您可以使用它来测试该方法。 根据 FindHomography,一旦您拥有一小组描述符而不是大型 2d 位图,您只需在两个图像之间匹配这些描述符。


回复评论:

兴趣点只是具有某些属性的小区域。所以这些区域的中心可能是黑色或白色;该算法并不专门寻找白色像素或曲线等大尺寸形状。重要的是这些线连接了两条曲线上大致相同的点,至少乍一看是这样。

【讨论】:

  • 那个网站看起来很不错。但我不能完全理解这个输出,代码画线是否正确?还是匹配黑点?
  • 好吧,我自己对这个实现不太了解,但我在上面的回答中添加了我所知道的。
  • 是否可以在计算匹配后将第一张图像转换为第二张图像?如果没有,是否有其他算法/工具可以执行此操作?
  • @Samsky 您可以使用 openCVs FindHomography 找到两幅图像之间的最佳仿射变换,然后使用 WarpAffine 或 WarpPerspective 将一幅图像转换为另一幅的近似值。
猜你喜欢
  • 2020-04-30
  • 2011-01-29
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 2011-05-21
  • 2014-07-07
相关资源
最近更新 更多