1

画像のゆがみに取り組んでいます。画像の実際の座標の変換されたバージョンはxとyであり、変換された画像の極座標はrとthetaです。

(円筒形アナモルフォーシス)。変換機能があります。しかし、イムは特定のことについて混乱しました。デカルトに簡単に変換できる変換関数から極座標を取得しています。しかし、この変換された画像を描画する方法は?新しいサイズは古い画像サイズとは異なるためです。

編集:私はシリンダーに示されているような画像を持っています。図のように錯視画像に変換する変換機能があります。この画像のサイズは元の画像とは異なるため、メイン画像のすべてのポイントが変換されていることを確認するにはどうすればよいですか。さらに、変換された画像内のこれらの点の座標は極性があります。openCVを使用して、変換された極座標を使用して新しい画像を形成できますか?

ここに画像の説明を入力してください

REF:http ://www.physics.uoguelph.ca/phyjlh/morph/Anamorph.pdf

4

1 に答える 1

1

ここには2つの問題があります。私の理解では、離散積分座標を浮動小数点座標に変換しているため、より大きな問題が発生します。もう1つの問題は、結果の画像のサイズが元の画像のサイズよりも大きいか小さいことです。さらに、結果の画像は長方形である必要はないため、トリミングするか、コーナーに沿って黒いピクセルで塗りつぶす必要があります。

http://opencv.willowgarage.com/documentation/geometric_image_transformations.htmlによると、放射状の変換ルーチンはありません。

I'd suggest you do the following:
  1. 元の画像を幅*2、高さ*2に拡大します。新しい画像を黒に設定します。(cvResize、cvZero)
  2. 元の画像の各ピクセルにまたがります。ピクセルの新しい座標を見つけます。その値の1/9を、新しい座標の8つの隣接座標すべて、および新しい座標自体に追加します。(CV_IMAGE_ELEM(...)+ = 1.0 / 9 * ....)
  3. 新しい画像を元の幅、高さに縮小します。
  4. 結果によっては、シャープニングルーチンを使用することをお勧めします。

範囲外のピクセルを保持したい場合、それは別の質問です。基本的に、受け取った座標の最小値と最大値を見つけたいので、たとえば、元の画像の最小値、最大値= [0,1024]、新しい最小値、最大値= [-200,1200]を使用して、関数を作成します。

normalize(int &convertedx,int &convertedy)
{
convertedx = MinNewX + (MaxNewX-MinNewX)/(MaxX-MinX) * convertedx;
convertedy = ...;
}
于 2013-01-18T20:56:44.803 に答える