2

I want your intellectual suggestions for a problem i have. I have 3D points data along with intensity field (x,y,z,I) which represent the 3D scene. I want this 3D data converted into an image (2D matrix with intensity values 'I').

I plan to do perspective projection of 3D points using pinhole camera model (Wikipedia).

x'=f*x/z and y'=f*y/z

What value should I select for 'f'? How is the size of image dependent on it? (say I need an image of size 500*500 , what value will suit for 'f')

Since coordinates in 2D image are integers, how should I quantize x' and y' values and substitute the corresponding intensity value? E.g. if I get two sets(by using f=10) as

x,y,z,I
(3,1,2,128) -> x',y',I(15,5,128)
(3.1,1.1,2,150) -> (15.5,5.5,150)

Of the above two sets, should i just round off the x' and y' values and use its intensity at that coordinate or should I use an average of intensity of the non-integer coordinates ?

Will the resulting image be clearly depicting the scene in 2D (like a photo taken from a camera)?

Shall pay much gratitude for your ideas. Thanks

4

1 に答える 1

0

平均強度、最近傍、またはその他の種類の内挿を使用するかどうかは、アプリケーションによって異なります。たとえば、OpenGL は、この操作を行うときに、選択するオプションを提供します (GL_TEXTURE_MIN_FILTER および GL_TEXTURE_MAG_FILTER を参照)。

さまざまなアプローチを試して、それらがどのように見えるかを確認することをお勧めします。線形補間と最近傍補間の違いは、1 行のコードです。意図したアプリケーションに関する詳細情報は、おそらく役立つでしょう。

射影を行うためのアルゴリズム的に最も単純なアプローチが、必ずしも最も計算効率が良いとは限りません。ポイントを投影するのではなく、プロセスが 2D ピクセル位置から開始し、対応する近くの 3D ポイントを見つけ、補間を実行して (最近傍補間であっても) 強度を取得する場合は、これをコーディングする方がはるかに簡単です。これにより、たとえば画像にギャップが生じるのを防ぎ、倍率やピクセル間のスペースのために補間を心配する必要がなくなります。

データを再度投影する方法は、達成しようとしているものによって異なるため、アプリケーションに関する詳細情報が役立ちます。たとえば、すべてのポイントを画像に収めようとしていますか? それとも、画像を埋めようとしていますか?それとも、投影された場合に正方形に押し込める可能性が高い雲の特性はありますか? 画像配列によって収集された場合は、簡単に投影できるはずです(元の座標を簡単に復元できるため、上記のメカニズムの多くは不要です)。そうしないと、画像内に表示されない点や、対応する点がない画像の部分が発生する可能性があります。

いくつかの仮定を立てれば、極限の射影方程式を解くことができます。640 x 480 の画像があり、投影の中心が画像の中心にあると仮定すると、次のようになります。

x'=f*x/z + 320

(これは、実際のモデルが画像配列のスケールにマッピングしてからピクセルにマッピングするピクセルにマッピングするために一般的に行われるように、焦点距離を誤用していることに注意してください)。

ポイント配列greatestx:xの最大値とそのポイントの対応する値をxgreatestx:zz

639.5=f*greatestx:x/greatestx:z + 320

そう、

f = 319.5*greatestx:z / greatestx:x

最小の x 値、最小の y 値、および最大の y 値に対してこれを行うと、次のようになります。

f = -319.5*smallestx:z / smallestx: x

f = 239.5*greatesty:z / greatesty: y

f = -239.5*smallesty:z / smallesty: y

ここで、上記のうち最小fのものを選択すると、点群が画像に収まることが保証されます (ただし、ギャップがある可能性があります)。最大のものを選択するfと、画像に隙間がないことが保証されます (ただし、画像に収まらない部分がある可能性があります)。

于 2013-01-28T14:24:54.787 に答える