17

对于桶形/枕形失真,无法理解如何在图像中获取原始 (x, y) 的 (x', y')。

4

4 回答 4

24

本文的第 2 节解释了这种转换。基本上:

在此处输入图像描述

这里我在Mathematica中做了一个例子:

在此处输入图像描述

于 2011-06-03T12:50:50.403 回答
2

opencv c ++中的简单桶形\枕形失真

IplImage* barrel_pincusion_dist(IplImage* img, double Cx,double Cy,double kx,double ky)
{
    IplImage* mapx = cvCreateImage( cvGetSize(img), IPL_DEPTH_32F, 1 );
    IplImage* mapy = cvCreateImage( cvGetSize(img), IPL_DEPTH_32F, 1 );

    int w= img->width;
    int h= img->height;

    float* pbuf = (float*)mapx->imageData;
    for (int y = 0; y < h; y++)
    {
        for (int x = 0; x < w; x++)
        {         
            float u= Cx+(x-Cx)*(1+kx*((x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)));
            *pbuf = u;
            ++pbuf;
        }
    }

    pbuf = (float*)mapy->imageData;
    for (int y = 0;y < h; y++)
    {
        for (int x = 0; x < w; x++) 
        {
            *pbuf = Cy+(y-Cy)*(1+ky*((x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)));
            ++pbuf;
        }
    }

    /*float* pbuf = (float*)mapx->imageData;
    for (int y = 0; y < h; y++)
    {
        int ty= y-Cy;
        for (int x = 0; x < w; x++)
        {
            int tx= x-Cx;
            int rt= tx*tx+ty*ty;

            *pbuf = (float)(tx*(1+kx*rt)+Cx);
            ++pbuf;
        }
    }

    pbuf = (float*)mapy->imageData;
    for (int y = 0;y < h; y++)
    {
        int ty= y-Cy;
        for (int x = 0; x < w; x++) 
        {
            int tx= x-Cx;
            int rt= tx*tx+ty*ty;

            *pbuf = (float)(ty*(1+ky*rt)+Cy);
            ++pbuf;
        }
    }*/

    IplImage* temp = cvCloneImage(img);
    cvRemap( temp, img, mapx, mapy ); 
    cvReleaseImage(&temp);
    cvReleaseImage(&mapx);
    cvReleaseImage(&mapy);

    return img;
}

更复杂的形式 http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html

于 2012-07-31T13:37:01.797 回答
2

您可以找到的多项式径向失真模型的近似值Fitzgibbon, 2001

在此处输入图像描述

其中 rd 和 ru 是距畸变中心的距离。这也用于过滤广角相机图像中的失真,以用于计算机视觉和图像处理目的。

你可以在这里找到更详细的原理和着色器代码来实现不失真过滤(以及前向变换):http: //marcodiiga.github.io/radial-lens-undistortion-filtering

如果您想了解我发布的方法的数学细节,我还将发布您应该查看的论文

  • 张志(1999)。通过从未知方向查看平面进行灵活的相机校准
  • 安德鲁·W·菲茨吉本 (2001)。多视角几何和镜头畸变的同时线性估计
于 2016-01-12T11:55:09.887 回答
1

根据 Wikipedia,也可以有 r 的 4 次幂。两个常数的符号(对于 r 到 2 和 r 到 4 项)可能是相反的,从而产生车把失真,其中图像的中心具有桶形失真并且边缘具有枕形失真,从而使直线看起来像车把胡须.

于 2018-05-28T09:55:18.757 回答