web-dev-qa-db-ja.com

バレル/針刺し歪みの式

バレル/ピンクッション歪みの場合、画像内の元の(x、y)の(x '、y')を取得する方法を理解できません。

16
breethe

このペーパー のセクション2では、変換について説明しています。基本的に:

enter image description here

ここで私は Mathematica で例を作りました:

enter image description here

22
Dr. belisarius

opencvc ++での単純なバレル\ピンクッション歪み

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

2
mrgloom

Fitzgibbon, 2001にある多項式放射歪曲モデルの近似は次のとおりです。

enter image description here

ここで、rdとruは歪みの中心からの距離です。これは、コンピュータービジョンや画像処理の目的で、広角カメラ画像から歪みをフィルターで除去するためにも使用されます。

歪みのないフィルタリング(および順方向変換)を実装するための原理とシェーダーコードの詳細な説明は、次の場所にあります: http://marcodiiga.github.io/radial-lens-unConstraintion-filtering

私が投稿した方法の数学的詳細を知りたい場合は、ぜひご覧になるべき論文も投稿しています。

  • Zhang Z.(1999)未知の方向から平面を表示することによる柔軟なカメラキャリブレーション
  • アンドリューW.フィッツギボン(2001)。複数のビュージオメトリとレンズ歪みの同時線形推定
2
Marco A.

ウィキペディアによると、4乗の項もある可能性があります。 2つの定数の符号(rから2およびrから4の項)は反対になり、画像の中心にバレルの歪みがあり、エッジにピンクッションの歪みがあり、直線にハンドルバーの口ひげのように見えます。 。

1
Phil Rosenberg