c++ - 显示黑色图像的几何变形

标签 c++ opencv transformation perspective homography

我在几何变形方面遇到问题,基本上是在自上而下的 View 中变形图像。不使用积分。

我有什么:

  1. 我有一个 45 度角的图像(即 F 是我的相机指向下方的位置) enter image description here

  2. This关于我想做什么的论文。第2页有主要公式

  3. 在 opencv cv::warpPerspective 中用来激活这个变形图像的主要函数
  4. 我有必要的 Ccam1_cam2 roation(假设我的数学是正确的)

我做了什么:

  1. 我已经使用论文中的公式生成了一个 H 矩阵。
  2. 测试是否没有平移只有旋转,即 H=R 是否会使扭曲的图像看起来更好。
  3. 查看变形图像中的 x、y 值并注意到它们是 <1,这很糟糕,因为它们需要在原始图像 400x530 的范围内。

    代码:

    cv::Mat  hmatrix = (cv::Mat_<double>(3,3) << H.c11, H.c12, H.c13, 
                           H.c21, H.c22, H.c23, 
                           H.c31, H.c32, H.c33);
    lfImg = cv::imread("undistortedsmall.bmp", 0);
    imshow("not warped image", lfImg);
    cv::waitKey(0);
    cv::Mat warpedimg;
    cv::Scalar borderValue;
    cv::warpPerspective(lfImg, warpedimg, hmatrix ,lfImg.size(),cv::INTER_LINEAR,cv::BORDER_CONSTANT,borderValue);
    
    imshow("warpedImage", warpedimg);
    
  4. 我从自上而下的图像中提取点,并从我的 45 度图像中提取相应的点,并生成一个变形良好的 H 矩阵。只是为了看看 H 矩阵会是什么样子。但规模完全不同。

例子:

 My generated H Matrix:
      0.240053 0.859119 -0.451983
      0.689905 -0.478534 -0.543171
      -0.682938 -0.181435 -0.707585

 pt generated H matrix
     0.894764 3.37653 77.6052
     -0.950235 2.02846 240.977
     -8.73899e-05 0.00384326 1

我想要的:

在不使用从图像中提取的点的情况下对该图像进行自上而下的变形。

问题 黑屏(如果我缩放矩阵我的一些倍数可以说 *100) 我得到了不正确的翘曲,但至少是可见的东西

最佳答案

由于您没有显示在 H 中生成值的完整代码 - 很难确定,但您可能缺少内部参数矩阵(通常也称为相机校准矩阵)。

您提供的论文中没有提到它,这意味着它们使用所谓的“标准化”或“未校准”单应性。当您从点对应生成单应性时,您将获得“校准的”单应性并获得预期结果。

考虑部分3D 平面到平面方程 here .如您所见,R-(t*n^t)/d 由矩阵 Ka 预乘并由 Kb^-1(倒置的第二个相机的固有矩阵)后乘,以产生“校准的”单应性。如果两张图像都是用同一台相机拍摄的,您可以假设 Ka = Kb。

因此,为了获得“校准的”单应性,您可以使用表达式 Hc = K * H * K^-1,其中 Hc 是校准的单应性,H 是未校准的单应性,K 是校准矩阵。

现在,您需要估算 K。理想情况下,您应该执行相机校准才能获得它,但如果您知道相机的焦距,则可以使用如下粗略的近似值:

    | f, 0, cx |
K = | 0, f, cy |
    | 0, 0,  1 |

其中 f 是以像素为单位的相机焦距,(cx, cy) 是主点的坐标(您可以使用 (w/2, h/2),其中 w 和 h 是以像素为单位的图像宽度和高度)

关于c++ - 显示黑色图像的几何变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25537775/

相关文章:

c++ - 如何使用 AdaBoost 进行特征选择?

image-processing - OpenCV 图像处理

Solr 字母转换/元音变音支持

c++ - 按多列对 Vecor 进行排序

vb.net - 在VB.NET项目中使用OpenCV库

string - 修改 Azure 数据工厂中事件的输出

javascript - 倾斜变换 HTML5 Canvas

c++ - OpenCV IP 摄像机应用程序崩溃 [h264 @ 0xxxxx] 访问单元中缺少图片

c++ - 如何为 static_assert 的评估设置前提条件?

C++/STL - 在 std::map 中访问类指针实例时程序崩溃