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をそのまま同じ値でわたすとそれらしい結果になった。
※バグと言い切れるか微妙なのでタイトルも変更