2

これが数学フォーラムとプログラミング フォーラムのどちらに投稿されるべきかはわかりませんが、両方に投稿して、どこに到達するかを確認します。

私は 2 つのコンピュータ イメージを持っています...そのうちの 1 つは「元の」イメージ (大きな TIF ファイル) です。もう 1 つは、元の画像を変換したバージョンです。ソフトウェア プログラムで回転、剪断、変換されています。変換された画像に対して何らかの作業を行う必要がありますが、計算を完了するには、元の画像の各ピクセルの (xy) 座標が必要です。

画像が 3x3 Transformation マトリックスで回転およびせん断されたことを知っています。行列があれば、最初の画像から 2 番目の画像を自分で (またはその逆に) 派生させることができます。回転、せん断、または平行移動がどれだけ行われたか正確にはわからないため、一連の既知の変換から行列を導き出すことはできません。私が持っているのは、各画像の対応する点(コーナーなど)のセットと、それらに対応する(x、y)座標です。だからここに私のジレンマがあります:

対応する変換されたポイントのセット ((x,y) -> (x',y')、3 つ以上) を使用して、ある画像を別の画像に変換するために使用された変換行列を導出できますか? 行列を導き出すことができれば、すべてのピクセル (すべて 1800 万個) の元の座標を解き、必要な計算を行うことができます。

誰でも助けることができますか?私は線形代数に精通しています...頭を悩ませずにこれを導き出すのに十分なほど精通していません。何でも大歓迎です!

  • マイク
4

3 に答える 3

3

手動自動かわからない...

マニュアル

長方形の四隅の変換された座標を指定すると、変換方程式を導き出すことができます。

代替テキストhttp://www.praeclarum.org/so/wellner.png

(Pierre WellnerのDigitalDeskでの紙との相互作用および彼の論文の詳細から)

ここで、方程式の係数を解く必要があります。

4つの点のペアを使用すると、4つの連立線形方程式の2つのセットをガウスの消去法ですばやく解いて、c1-8の値を見つけることができます。

最後に、これらの方程式を必要な3x3行列に変換できます。上記の方程式は、非線形変換を行うのに十分強力であり、3x3アフィンせん断行列に単純化できます。

しかし、私は非線形方程式(上記)に固執します。なぜなら、それらは遠近法による歪みを処理できるからです。

自動

同じ方法ですが、線検出アルゴリズムと組み合わせたエッジ検出器を使用して、長方形を構成する4本の線のセットを見つけることができます。

画像の長方形が本当に目立つ場合(暗い背景に白っぽい画像)、OpenCVの機能検出などのライブラリから利用できるコーナー検出を使用できます(を参照)。cvCornerHarris

これらの線を交差させて4つのコーナーを見つけ、変換式を使用できます。

于 2009-12-06T19:05:53.573 に答える
1

3x3変換行列を定義するために必要なポイントは3つだけです。ポイント(0,0)、(0,1)、(1,0)があり、それらを行列[abcdef 0 0 1]で変換すると、(c、f)、(b、e)が得られます。および(a、d)。

于 2009-12-06T19:09:38.733 に答える
1

変換前後の X/Y 座標を含む6 つの3ポイント ( 6 つの未知数)のリストを提供することから始めるべきだと思います。

それから、私より賢い誰かがそれを一連の線形方程式に取り込んで、それを (たとえば) Wolfram Alpha に入力して解いてもらいます。

AffineTransformに関する Java のドキュメントの上部には、マトリックスを設定する必要がある方法が示されています。

[ x']   [  m00  m01  m02  ] [ x ]   [ m00x + m01y + m02 ]
[ y'] = [  m10  m11  m12  ] [ y ] = [ m10x + m11y + m12 ]
[ 1 ]   [   0    0    1   ] [ 1 ]   [         1         ]

綿毛の葉のほとんどを取り除く:

[ x']   [ m00x + m01y + m02 ]
[ y'] = [ m10x + m11y + m12 ]

次に、次のような 6 x 2 の方程式のセットを設定します。

m00x + m01y + m02 - x' = 0
m10x + m11y + m12 - y' = 0

(他の 2 つの x/y 前後のペアについて繰り返します)

それらを方程式ソルバーに投げます。

于 2009-12-06T18:55:04.003 に答える