cv::fisheye::initUndistortRectifyMapのPについて

自分用のメモ

OpenCV公式のIssue1にある通り、cv::fisheye::initUndistortRectifyMap()の実装にバグがあるような気がする。x、yの値が0〜size.width、0〜size.heightになっているが、uvの計算式は-1.0〜+1.0?の範囲を想定しているように見える。

    for( int i = 0; i < size.height; ++i)
    {
// snip
        double _x = i*iR(0, 1) + iR(0, 2),
               _y = i*iR(1, 1) + iR(1, 2),
               _w = i*iR(2, 1) + iR(2, 2);

        for( int j = 0; j < size.width; ++j)
        {
// snip
                u = f[0]*x*scale + c[0];
                v = f[1]*y*scale + c[1];

2020/05/07追記

fisheyeモデルでは引数Pがデフォルトで単位行列なのが良くない?ような気もしてきた。
pinholeモデルの場合はgetDefaultNewCameraMatrix()を内部で呼んでる。fisheyeの場合、どのような値が望ましいのだろうか。とりあえずPにKをそのまま同じ値でわたすとそれらしい結果になった。

※バグと言い切れるか微妙なのでタイトルも変更