【问题标题】:Link two pictures pixels using Homography使用 Homography 链接两个图片像素
【发布时间】:2018-11-04 19:19:31
【问题描述】:

我有两张相同的图片,但第二张图片变形且尺寸不同。我希望能够在第一张图片上选择一个点并在第二张图片上找到完全相同的点。 图片的同步将在每张图片上进行4个点。

示例:
正常图片

图片失真

结果将是一个函数从第一张图片获取 X,Y 点并返回与第二张图片完全相同的点对应的 X',Y'。

我发现了 OpenCV 的 findHomography() 函数,它返回一个 Homography 矩阵,但在所有示例中,该矩阵用于使用 warpPerspective() 扭曲第二张图像,这不是我想要的。我只想要两张图片之间对应的坐标/像素。

关于如何在 C# 中做到这一点的任何提示? (是否使用 OpenCV)

编辑:

积分示例:

普通图片:[250, 25] , [250, 287] , [399, 287] , [400, 28]

目标图片:[0, 0] , [2098, 29538] , [19127, 28164] , [17097, -1200]

使用 OPEN CV 进行编辑:

OpenCvSharp.Mat hCv = OpenCvSharp.Cv2.FindHomography(srcPoints, dstPoints);
OpenCvSharp.Point2d[] resultCv = OpenCvSharp.Cv2.PerspectiveTransform(targetCv, hCv);

【问题讨论】:

  • 两张图片上的四个角点都有吗?
  • 是的,我有。
  • 您可以为这些图片发布这些要点吗?
  • 见:Accord Framework .NET,更具体地说,Ransac Homography。另外,RANSAC & SIFT homography.
  • 您将需要使用 OpenCV 函数 perspectiveTransform()warpPerspective 将扭曲图像,perspectiveTransform 将扭曲一系列点并为您提供新位置。或者,您可以通过矩阵乘法轻松地自己计算,公式只是将齐次坐标相乘,然后进行缩放——公式显示在 perspectiveTransform 文档中。

标签: c# image opencv image-processing


【解决方案1】:

感谢 Alexander Reynolds 的评论,我终于使用了 OpenCvSharp 3 库。 您可以使用以下方法获得单应矩阵:

homographyMatrix = OpenCvSharp.Cv2.FindHomography(originalPicturePoints, targetPicturePoints);

然后从原图得到目标图片上的任意一点:

targetPoint = OpenCvSharp.Cv2.PerspectiveTransform(orignalPoint, homographyMatrix);

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多