賞金ステータスの更新:
線形レンズを座標からdestination
座標にマッピングする方法を発見しましたsource
。
魚眼レンズから直線に移動する中心からの半径距離をどのように計算しますか?
1)。私は実際にそれを逆にし、ソース座標を宛先座標にマッピングするのに苦労しています。私が投稿した変換関数のスタイルのコードで、逆は何ですか?
2)。また、一部のレンズでは歪みの補正が不完全であることもわかります。おそらく、厳密に線形ではないレンズです。これらのレンズのソースとデスティネーションの座標を往復するのに相当するものは何ですか? 繰り返しますが、数式だけでなく、より多くのコードをお願いします...
最初に述べた質問:
魚眼レンズで撮影した写真の位置を説明するポイントがいくつかあります。
これらの点を直線座標に変換したい。画像の歪みを解消したい。
魚眼効果を生成する方法のこの説明を見つけましたが、それを元に戻す方法は見つかりませんでした。
ツールを使用してそれを行う方法を説明するブログ投稿もあります。これらの写真はそれからのものです:
(1) :SOURCE
元の写真のリンク
入力 :修正する魚眼歪みのある元の画像。
(2) :DESTINATION
元の写真のリンク
出力 :修正された画像 (技術的には遠近法も含みますが、それは別の手順です)。
魚眼レンズから直線に移動する中心からの半径距離をどのように計算しますか?
私の関数スタブは次のようになります。
Point correct_fisheye(const Point& p,const Size& img) {
// to polar
const Point centre = {img.width/2,img.height/2};
const Point rel = {p.x-centre.x,p.y-centre.y};
const double theta = atan2(rel.y,rel.x);
double R = sqrt((rel.x*rel.x)+(rel.y*rel.y));
// fisheye undistortion in here please
//... change R ...
// back to rectangular
const Point ret = Point(centre.x+R*cos(theta),centre.y+R*sin(theta));
fprintf(stderr,"(%d,%d) in (%d,%d) = %f,%f = (%d,%d)\n",p.x,p.y,img.width,img.height,theta,R,ret.x,ret.y);
return ret;
}
または、ポイントを見つける前に画像を魚眼レンズから直線に変換することもできますが、OpenCV のドキュメントに完全に困惑しています。OpenCV でそれを行う簡単な方法はありますか?また、ライブ ビデオ フィードに対して実行するのに十分なパフォーマンスを発揮しますか?