4

通常の写真から魚眼レンズ(樽型歪み)をシミュレートするアルゴリズム(ビットマップピクセル操作)を探しています。これまでのところ、OpenCV、OpenGL、jhlabsなどの外部ライブラリを含む実装を見つけました。私はデジタル画像処理のクラスを受講していて、コース評価プロジェクトを作成しているので、外部ライブラリを使用することで良い成績が得られるかどうかはわかりません。それで、誰かが私にそのようなアルゴリズムへの参照を与えるでしょうか?

追伸 Javaで実装するように求められますが、どの言語の例でもかまいません。

4

3 に答える 3

6

あなたが望むことをする例を見つけることができたのは良いことです。それらを質問に含めると便利です。それを読んだ人があなたと同じページにいることを確認できます. ここにリンクがあります。

面倒な作業をライブラリに頼らずに、自分でやりたいと思うのも良いことです。しかし、それは、そのようなソリューションを無視しなければならないという意味ではありません。理由は次のとおりです。

そのリンクで OpenCV が実際に使用されているものを見てください。で始まる関数は次のcvとおりです。

$ grep -o "cv\\w*" barrel.cpp | sort | uniq
cv
cvCreateImage
cvGet2D
cvGetSize
cvLoadImage
cvNamedWindow
cvSaveImage
cvSet2D
cvShowImage
cvWaitKey

OpenCV APIを見ると、これらの関数はすべて、画像の作成、削除、表示、ピクセルの設定などのありふれたタスクを処理するだけです。これらのタスクはいずれもバレル歪みに固有のものではありません。バレル歪みに関する限り、そのソリューションはOpenCV 固有のものではありません

実際、プログラムの核心は次のとおりです。

float getRadialX(float x,float y,float cx,float cy,float k){
  x = (x*xscale+xshift);
  y = (y*yscale+yshift);
  float res = x+((x-cx)*k*((x-cx)*(x-cx)+(y-cy)*(y-cy)));
  return res;
}

float getRadialY(float x,float y,float cx,float cy,float k){
  x = (x*xscale+xshift);
  y = (y*yscale+yshift);
  float res = y+((y-cy)*k*((x-cx)*(x-cx)+(y-cy)*(y-cy)));
  return res;
}

これは単なるラジアル変換式です。これは、理解する必要があるビットです。ご覧のとおり、そこには OpenCV 呼び出しはありません。

于 2011-02-12T15:10:18.533 に答える
3

私はそれについての記事をhttp://www.helviojunior.com.br/fotografia/barrel-and-pincushion-歪み/に書きました

于 2013-02-16T01:23:59.193 に答える