2

PIL を使用して画像の透視変換を実行しようとしています。画像の角の座標と、画像の角がどこにあるべきかの座標があります。「データ」パラメーターの (a、b、c、d、e、f、g、h) を取得する方法がわかりません。

http://bishopw.loni.ucla.edu/AIR5/2Dperspective.htmlと関係があることは知っていますが、 このページが何を意味するのかわかりません。

4

1 に答える 1

4

式を解くことでパラメータを取得できます: T.x1 + v= x2 ここで、x1 は座標系 1 (元の画像) のポイント座標であり、x2 は新しい座標系 (傾斜または回転または 3D) です。x1、x2、v は 2 行 1 列のベクトルで、T は 2 行 2 列の行列です。たとえば、x1 = (x1x, x1y)、x2 = (x2x,x2y)、v = (c,f)、

T = a b
    d e

行列代数がわからない場合は、変数を削除することでこれを解決できます。ポイントごとに、次のような 2 つの方程式が得られます。

a*x1x + b*x1y + c = x2x
d*x1x + e*x1y + f = x2y

コーナーポイントの1つを差し込む場合。x1 = (0,1) と x2 = (0,4) とすると、次のようになります。

a*0   + b*1   + c = 0
d*0   + e*1   + f = 4

そこから、次のことがわかります。

b = -c
e = 4-f

ここで、これを他の端点まで繰り返します (そして b = -c の知識を使用します)。すべての変数の数値を解くことができます。

ヒント、変換を計算する前に、元の画像座標を単位平方 (0,0)、(0,1)、(1,0)、および (1,1) にスケーリングします。このように、1 と 0 がたくさんあります。数学的方法はガウス消去法と呼ばれます (google または wikipedia -> ガウス消去法 -> アルゴリズムの例を使用)。

im.tranform のデータには 6 つのパラメーター (2d -> 2d 変換) があることに注意してください。

データは、アフィン変換行列の最初の 2 行を含む 6 タプル (a、b、c、d、e、f) です。出力イメージの各ピクセル (x, y) に対して、入力イメージの位置 (ax + by + c, dx + e y + f) から新しい値が取得され、最も近いピクセルに丸められます。

編集:アップ、上記はAFFINE変換用でした。あなたはPERSPECTIVE変換について尋ねていました。機能は同じですが、パラメータが異なります。データは次のようになります。

データは、透視変換の係数を含む 8 タプル (a、b、c、d、e、f、g、h) です。出力イメージの各ピクセル (x, y) について、新しい値は (ax + by + c)/(gx + hy + 1)、(dx + ey + f)/(gx + hy + 1) 入力画像では、最も近いピクセルに丸められます。

したがって、式は Q.x3 = x4 で、元の座標 x3 は (x3x, x3y,1) で、変換後の座標 x4 は (x4x, x4y, 1) で、Q の場合:

Q = a b c
    d e f
    g h 1

AFFINE と比較して、定数 v を行列に埋め込みます。これで、方程式は次のようになります。

a*x3x + b*x3y + c*1 = x4x    
d*x3x + e*x3y + f*1 = x4y   
g*x3x + h*x3y + 1*1 = 1

AFFINE変換としてガウス消去法で解く。

于 2013-10-11T09:19:02.160 に答える