3

ビデオ処理用のフィルターアルゴリズムを開発するための最良の方法を誰かに教えてもらえますか?

たとえば、魚眼レンズフィルターを画像に適用したいとします。この効果を模倣するように、ピクセルをどのように処理しますか?

画像をより赤く見せたい場合は、各ピクセルの青と緑の成分から値を差し引き、赤の成分のみを残します。

この種の歪みは単なる色処理ではないので、魚眼レンズフィルターやピンチフィルターなどを模倣する正しい方法でピクセルを操作する方法を知りたいと思います。

編集:

ビデオ処理用のフィルターアルゴリズム*

4

2 に答える 2

5

マーティンが述べているように、単なる色補正ではなく、画像に歪みを適用するには、その画像内のピクセルを何らかの方法で変位させる必要があります。通常、出力画像から始めて、出力の各位置を埋めるために取得する入力ピクセルの位置を特定します。

たとえば、この回答で示すピンチディストーションを生成するには、次のようなOpenGLESフラグメントシェーダーを使用します。

 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;

 uniform highp vec2 center;
 uniform highp float radius;
 uniform highp float scale;

 void main()
 {
     highp vec2 textureCoordinateToUse = textureCoordinate;
     highp float dist = distance(center, textureCoordinate);
     textureCoordinateToUse -= center;
     if (dist < radius)
     {
         highp float percent = 1.0 + ((0.5 - dist) / 0.5) * scale;

         textureCoordinateToUse = textureCoordinateToUse * percent;
     }
     textureCoordinateToUse += center;

     gl_FragColor = texture2D(inputImageTexture, textureCoordinateToUse );

 }

このGLSLコードは、出力画像のすべてのピクセルに適用されます。ピンチされている領域の中心から現在のピクセル座標までの距離を計算します。次に、その入力距離を取得し、入力scaleパラメーターに基づいてスケーリングします。この新しいスケーリングされた距離は、出力カラーが読み取られる入力画像の座標を移動するために使用されます。

各出力ピクセルの変位した座標で入力画像から色をサンプリングすると、入力画像の歪んだバージョンが生成されます。私のリンクされた回答でわかるように、この変位を計算するためのわずかに異なる関数は、非常に異なる歪みにつながる可能性があります。

于 2012-05-17T17:38:55.733 に答える
3

イメージワープを適用します。基本的に、変換された出力画像の各ポイントについて、元の画像のどこからそのポイントが来るかを計算する数式があります。次に、それらの座標でピクセルをコピーするだけです。opencvにはこれを行う関数があります。

通常、あなたはフィッシュアイのような光学効果を取り除こうとしていますが、原理は同じです。

ps。結果から始めてソースに戻ることを考えるのは少し混乱しますが、ソース画像の多くのポイントがすべて結果の同じポイントに行く可能性があり、結果のピクセルの均一なグリッドが必要なため、この方法で行います。

于 2012-05-17T14:32:46.100 に答える