gpt4 book ai didi

image-processing - cv Remap 替换 cv WarpPerspective

转载 作者:行者123 更新时间:2023-12-02 16:50:12 32 4
gpt4 key购买 nike

下面的转换是我想要做的。

对于源图像中的每个图 block ,我知道每个角的坐标,并且我知道输出图像中每个对应角的坐标,所以我可以调用 cvWarpPerspective 扭曲每个图 block ,然后将四边形连接在一起以获得最终的输出图像。

可以简历重映射在一次转换中做到这一点?如果是,我如何从我必须传递给 cvRemap 函数的坐标构造 map (mapx 和 mapy)?我搜索了 EmguCV 文档,但找不到 cvRemap 示例。

The source image

The output image

最佳答案

我没有使用 emgu 的经验(实际上我对它的评价很低),但我可以解释一下 remap 和 warpPerspective。它可以帮助您在 emgu 中找到相应的功能。

remap 获取输入图片和坐标重定位图,并将其应用于输出。 map 存储信息如下:获取像素 (1, 4) 并将其移动到 (3, 5)。 map 中未定义的像素用 0 或其他值填充,具体取决于额外参数。请注意,它还使用一些插值来获得平滑的结果。

warpPerspective 采用几何透视变换,在内部计算变换的映射,然后调用 remap() 将其应用于输入。实际上,OpenCV 中的很多函数都使用了 remap,或者可以使用它。 warpAffine、镜头校正和其他人构建他们的自定义贴图,然后调用 remap 来应用它们。

透视变换由 3.3 矩阵 H 定义。因此,输入图像中的每个坐标将根据 H 矩阵进行移位:

            [ h11 h12 h13 ]    [ x ]
[x' y' 1] = [ h21 h22 h23 ] * [ y ]
[ h31 h32 h33 ] [ 1 ]

warpPerspective 对目标图像中的每个点应用逆变换,以找出源图像中应该移动的像素的位置,并将该信息存储在 map 中。

您可以使用该代码并在您的应用程序中创建自定义函数,但我不知道在 C# 中执行此操作有多容易。 C++ 本来就是小菜一碟。

最后说明:我使用了术语 map ,尽管 remap() 函数中有两个 map 参数。更令人困惑的是,它们可以具有完全不同的含义。
  • 第一个有效组合是其中 mapx 包含 x 坐标的坐标变换,在宽高图像中,一个 channel 。 mapy 是 y 维度的对应映射。坐标是浮点值,反射(reflect)了从一幅图像到另一幅图像的坐标变换并不完全映射到整数值这一事实。例如,像素 (2, 5) 可能映射到 (3.456, 7.293)
  • 第二种可能性是将整数坐标存储在 mapx 中,用于两个 channel 中的 x 和 y,并在第二个参数 mapy 中保留插值权重表。生成第一种格式通常要容易得多,但第二种格式处理起来更快。要了解 sencod 格式,您应该阅读 OpenCV 源代码,因为它没有任何文档记录。
  • 关于image-processing - cv Remap 替换 cv WarpPerspective,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11878766/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com