22

画像の歪みのアルゴリズムはどこにありますか? Blur やその他の古典的なアルゴリズムの情報は非常に多くありますが、より複雑なものはほとんどありません。特に、渦巻き効果の画像歪みアルゴリズムに興味があります。

4

5 に答える 5

30

参考文献は見つかりませんが、歪み効果がどのように機能するかについての基本的なアイデアを提供できます。

歪みの鍵は、歪んだ画像の 2 つの座標 (x,y) を元の画像の座標 (u,v) に変換する関数です。歪んだ画像を元の画像に戻すため、これは歪みの逆関数を指定します。

歪んだ画像を生成するには、x と y をループし、逆歪み関数を使用して (x,y) から点 (u,v) を計算し、(x,y) の色成分をそれらと同じになるように設定します。元の画像の (u,v) にあります。通常、(u,v) は正確にピクセルの中心にあるわけではないため、(u,v) での色を決定するために補間 (例: http://en.wikipedia.org/wiki/Bilinear_interpolation ) を使用しますが、むしろ、ピクセル間の分数点にあります。

渦巻きは本質的に回転であり、回転角度は画像の中心からの距離に依存します。例は次のとおりです。

a = amount of rotation
b = size of effect

angle = a*exp(-(x*x+y*y)/(b*b))
u = cos(angle)*x + sin(angle)*y
v = -sin(angle)*x + cos(angle)*y

ここでは、簡単のために渦の中心が (0, 0) にあると仮定します。渦は、歪み関数の前の x と y から渦の位置座標を減算し、その後の u と v に追加することで、どこにでも置くことができます。

さまざまな渦巻き効果があります。一部 (上記のようなもの) は、局所的な領域のみを渦巻きにし、画像の端に向かって渦巻きの量が減少します。他のものは、画像の端に向かって渦巻きを増やします。この種のことは、 angle= 行をいじることによって行うことができます。

angle = a*(x*x+y*y)
于 2008-10-22T12:41:10.187 に答える
21

Jerry's Java Image Filtersには、多くの画像フィルター/効果の Java 実装があります。そこからインスピレーションを得ることができるかもしれません。

于 2008-10-22T16:28:40.307 に答える
5

渦巻きなどは、ピクセル位置でのマトリックス変換です。新しい画像を作成し、現在の位置に行列を掛けて得られる画像上の位置から色を取得します。

行列は現在の位置に依存します。

ここにそれを行う方法を示す良いCodeProjectがあります

http://www.codeproject.com/KB/GDI-plus/displacementfilters.aspx

于 2008-10-22T12:44:56.280 に答える
2

新しいグラフィックライブラリがあり、多くの機能があります

http://code.google.com/p/picasso-graphic/

于 2009-10-13T05:11:20.267 に答える
0

ImageMagickを見てください。これは、画像変換および編集ツールキットであり、すべての一般的な言語のインターフェイスを備えています。

-displace オペレータは、正しいディスプレイスメント マップを使用して渦巻きを作成できます。

何らかの理由で ImageMagick インターフェイスに満足できない場合は、いつでもフィルタのソース コードを参照して、そこから進むことができます。

于 2008-10-22T12:41:35.227 に答える