2011-06-21 37 views
1

私は4点の画像を持っています。これらの点を描画したい図のX、Y座標に正確に(または非常に近い)この画像の上に画像は現在600×600ピクセルですが、調整することができます。Matlab - 画像上にスケーリングされた図形を描画する方法

マイフィギュアスケールはどのように私はそれを一致させるために私の画像を揃えることができ

AXIS([388020 388090 5776940 5777010]) 

から行きますか?だから、matlabはその上に描画?

私のmatlabスクリプトは、これを実行していますが、下の画像は表示されませんが、matlabの描画は逆転しているようです。

% 3円と推定 %ポイント

D =サイズ(dataAdjusted)iに対する 長さ= D(1)

を含む画像を出力ライン毎にCSVファイルの %を取ります= [1:1]

%# read and display image 
img = imread('hciLab_N.png'); 
figure('Visible', 'off'),imagesc([388020 388090], [5776940 5777010], img);  

%# make sure the image doesn't disappear if we plot something else 
hold on 

%axis([388020 388090 5776940 5777010]); 

%location estimation 
yCoord = dataAdjusted(i,2) 
xCoord = dataAdjusted(i,3) 

%first circle y, x, radius 
c1Y = dataAdjusted(i,4); 
c1X = dataAdjusted(i,5); 
c1R = dataAdjusted(i,6); 

%second circle y, x, radius 
c2Y = dataAdjusted(i,7); 
c2X = dataAdjusted(i,8); 
c2R = dataAdjusted(i,9); 

%third circle y, x, radius 
c3Y = dataAdjusted(i,10); 
c3X = dataAdjusted(i,11); 
c3R = dataAdjusted(i,12); 


%draw location 
%rectangle('Position',[xCoord-.5,yCoord-.5,2*.5,2*.5],'Curvature',[1,1], 'EdgeColor', 'r') 
[locX, locY] = makeCircle(xCoord, yCoord, .5); 
scatter(locX, locY, .2,'b') 

%draw circles 
%rectangle('Position',[c1X-c1R,c1Y-c1R,2*c1R,2*c1R],'Curvature',[1,1]) 
%rectangle('Position',[c2X-c2R,c2Y-c2R,2*c2R,2*c2R],'Curvature',[1,1]) 
%rectangle('Position',[c3X-c3R,c3Y-c3R,2*c3R,2*c3R],'Curvature',[1,1]) 
[c1X, c1y] = makeCircle(c1X, c1Y, c1R); 
scatter(c1X, c1y, .2,'k') 
[c2X, c2y] = makeCircle(c2X, c2Y, c2R); 
scatter(c2X, c2y, .2,'k') 
[c3X, c3y] = makeCircle(c3X, c3Y, c2R); 
scatter(c3X, c3y, .2,'k') 


% 80 5776978.148 388054.1747 
%rectangle('Position',[388054.1747-1,5776978.148-1,2*1,2*1],'Curvature',[1,1], 'EdgeColor', 'g') 
[r1X, r1y] = makeCircle(388054.1747, 5776978.148, 1); 
scatter(r1X, r1y,.2,'g') 


% 87 5776988.825 388043.9639 
%rectangle('Position',[388043.9639-1,5776988.825-1,2*1,2*1],'Curvature',[1,1], 'EdgeColor', 'g') 
[r2X, r2y] = makeCircle(388043.9639, 5776988.825, 1); 
scatter(r2X, r2y,.2,'g') 


% 88 5776970.712 388054.2578 
%rectangle('Position',[388054.2578-1,5776970.712-1,2*1,2*1],'Curvature',[1,1], 'EdgeColor', 'g') 
[r3X, r3y] = makeCircle(388054.2578,5776970.712, 1); 
scatter(r3X, r3y,.2,'g') 


% 89 5776975.889 388039.8496 
%rectangle('Position',[388039.8496-1,5776975.889-1,2*1,2*1],'Curvature',[1,1], 'EdgeColor', 'g') 
[r4X, r4y] = makeCircle(388039.8496,5776975.889, 1); 
scatter(r4X, r4y,.2,'g') 


%title(['Localization of duty cycle ' this_name ]); 
saveas(gcf, ['TrilaterationNumber_Adjusted_WithRouters_Scaled' num2str(i)], 'png'); 

エンド

答えて

1

あなたは、両方のを呼び出すことができます210その後、軸の範囲として使用されているのx、yの限界とimagesc():「すべてを保持する」

data = makeData(); 
imagesc([x0 x1], [y0 y1], data); 
axis('xy'); 
colorbar; 

あなたが発行する必要があります。あなただけのスケーリングされたデータが必要な場合は、

data = makeImage(); 
image([x0 x1],[y0 y1],data); 
axis('xy'); 

をかいったん画像を載せたら、何かをプロットする前に。

+0

ありがとう、私は今イメージに描くことができます - そして、私は元の質問のコードを現在のものに改訂しました。 imagec()関数はy軸を反転させています...画像は正しく表示されますが、scatter()の呼び出しはすべて、x軸が増加している間にy軸が減少しています。 x軸とy軸の両方が増加するようにする方法についてのコメント? – Michael

関連する問題