2011-12-04 13 views
1

画像に凸面鏡効果と凹面鏡効果を追加するアルゴリズムを探しています。私はこれを効率的にする方法も知りたい。画像データにアルゴリズムを適用するか、効果を含む透明な画像でオーバーレイする。しかし、私は第二の選択肢がこの場合に当てはまるとは思わない。プログラムに画像に凸効果を追加する

答えて

2

ハードウェアプリミティブを使用する代わりに手動で行う場合は、bresenham interpolation algorithm(通常は線画用に使用されます)の方法があります。エラー伝播は、他のより複雑なメソッドよりはるかに効率的です。

ブレーゼンハムは補間にすぎません。効率的なデザインを他の場所で使用する機会を見逃してはいけません(ラインドレッシングの勾配計算は、2D、3D、透明度、反射、色など他の次元を補間することができる多くの補間アプリケーションの1つに過ぎません)。

25年前、ビットマップのサイズを変更したり、リアルタイム3Dエンジンでテクスチャマッピングを行ったりしたことを覚えています。それは、グラフィックアクセラレーションされたビデオボードが一番の幸運を要した時でした。

+0

を記憶しています。レンズ画像の変形は一般に二次元フーリエ変換から得られるので、既知の最も簡単なアルゴリズムの1つを用いてそのような複雑な効果を得ることは驚くべきことである。 – CapelliC

+0

2D問題が2回のパス(1つの水平、垂直)で解決されるため、1D(走査線)を考えてみましょう。したがって、凹状の効果は、走査線の中央部分を拡大し、境界部分を引き伸ばします(また、半分の値だけを計算するために対称性を利用できます)。これが補間の役割です。凸効果はその逆を行います。線形補間に満足できない場合は、ループに因子を追加することができます。これは、Fourrier変換よりもはるかに高速です。 3D効果を得るには、3回目のパスを使用します。 – Gil

+0

okですが、これまでのbreshenamアルゴリズムのように思われます。 – CapelliC

2

CImgライブラリには、例として\ CImg_demo.cppという魚眼があります。コアアルゴリズムは非常にシンプルです(一般的にこのライブラリと同じように高速です)。私はそれが実際の光学効果の近似だと思っていますが、凸面鏡を扱うように修正することができます。私はそれが '負の'曲率を扱うために拡張できるかどうかは分かりません。

1

を使用して、値を補間してビットマップのサイズと一致させることができます。逆効果は、オフセットまたはより大きなテーブルのいずれかを使用して達成されます。

あなたは、このようなアルゴリズムが要求された場合にも適用することができる方法を説明しなければならない私の80年代にDOSデモ(の偉大回)...

関連する問題