2016-06-17 3 views
0

このすべてはMatlabで行われます。私は、の一部ののキー頂点の2次元RGB画像を持っています。つまり、私は3つのベクトル(m x 1):X、Y、Zを持ちます。[X(i)、Y(i)]は深さZ(i)の画像内の点を指定します。2D画像のデータをどのように深みを増すには?

私の問題の核心はこれです:私は、深さ情報を持つ「歪められた」画像を描画したい

。しかし、「メッシュ(X、Y、Z、RGBImage)」や「サーフィン」のような関数を呼び出すたびに、「Zは行列ではなくベクトルでなければならない」といった奇妙なエラーが発生します。また、データを使用可能な形式に変換する方法がわからないため、「ワープ」機能を実装することさえできませんでした。

本当にありがとうございます。

EDIT:私はついに私が望むように動作させました。変更するために必要な唯一のもの、それが答えていなかったが、

s = surf(Xmat,Ymat,Zmat, T1, 'edgecolor', 'none', 'FaceColor', ... 
'texturemap'); 

T1 = rgb2gray(OrignialRGBImage);行を含めることでした。本当にありがとう!

答えて

0

私は現在MATLABにアクセスできないので、私は解決策の概要を述べています。

まず、meshgrid:[Xmat,Ymat] = meshgrid(1:imgCols,1:imgRows);を使用して2つの行列を作成します。現在、[X,Y]の行はすべて[Xmat(i,j),Ymat(i,j)](i,j))となっています。次のステップでは、[Ymat(i,j),Xmat(i,j)]の正しい奥行き値がZmat(i,j)になるようにZmatを作成します。あなたは次のようにこれを行うことができるようになります。

Zmat = zeros(imgRows,imgCols); 
for i=1:size(X,1) 
    Zmat(Y(i),X(i))=Z(i); 
end 

次のように今、あなたはXmat,Ymat,Zmatsurfを行うことができます。次に、イメージをテクスチャとしてオーバーレイします。

s = surf(Xmat,Ymat,Zmat); 
set(s, 'faceColor', 'texture','edgecolor', 'none','cdata', subimage); %not tested, 
                     %see if it works 

hereから取られたオーバーレイ部分。

上記の部分がうまくいかない場合、Zmatをヒートマップスタイルでオーバーレイすることができます。this questionを参照してください。

+0

私はそれを行ってくれます、ありがとうございます。 – phatty

+0

これはちょっと働いた!私の編集を見てください! – phatty

+0

知ってよかった。正確性をチェックするためにこのコードを実行することができなかったので、いくつかの調整が必要になると確信していました。 –

関連する問題