2010-07-20 73 views
1

我有大小爲600 * 600的圖像,它顯示在800 * 800像素的屏幕上。 在x,y座標,其中在屏幕上用戶的外觀被記錄在一個磁盤陣列:Matlab調整座標

x =[250,300,390,750,760]; 
y =[120,550,250,130,420]; 

在其它程序中,我要繪製的X,Y的600 * 600的圖像上的座標。問題在於某些x,y圖不在圖像中(,如下圖所示),因爲座標大於圖像的最大尺寸(600 * 600)。

EDITED: 如何變換/調整更大的圖像(800×800)進入較小的圖像(600×600)的座標,從而所有的x,y座標是內部較小圖像(600 * 600) ?舉例來說,例如,800 * 800圖像的圖像內的600 * 600的左上圖像的座標是例如800 * 800圖像的左上圖像的座標是800 * 800圖像的圖像內的左上圖像的座標。 x = -10,y = 3.

謝謝。


alt text http://img9.imageshack.us/img9/8836/e47184420f.jpg

回答

0

爲了讓像素圖像座標,則需要知道圖像的左下角和右上角放在屏幕上的位置。從中你可以計算圖像的偏移和縮放。

%# define some parameters 
imageSize = [600 600]; 
topLeftPixScreen = [200,100]; %# position of the top left image corner in screen pixels 
bottomRightPixScreen = [800,750]; %# position of the bottom right image corner in screen pixels 

%# transform coordinates 
oldX =[250,300,390,750]; 
oldY =[120,550,250,130,420]; 

newX = (oldX - topLeftPixScreen(1))/(bottomRightPixScreen(1) - topLeftPixScreen(1) + 1); 
newY = (oldY - topLeftPixScreen(2))/(bottomRightPixScreen(2) - topLeftPixScreen(2) + 1); 

說了這麼多,我建議使用ginput選擇用Matlab的點,因爲這個函數直接返回圖像像素。


編輯

如果你只有左上角,你要希望沒有發生過任何縮放 - 否則,沒有辦法,你可以轉換點。

隨着偏移只,上述簡化爲

%#定義一些參數 IMAGESIZE = [600 600]。 topLeftPixScreen = [200,100];在屏幕像素左上角圖像的角落%#位置

%# transform coordinates 
oldX =[250,300,390,750]; 
oldY =[120,550,250,130,420]; 

newX = oldX - topLeftPixScreen(1); 
newY = oldY - topLeftPixScreen(2); 
+0

我只知道圖像的左上角座標(600 * 600),例如x = -10,y = 3 – Jessy 2010-07-20 13:45:53

+0

@Jessy:bottomLeft/topRight假定[0,0]位於屏幕的左下方。另外,您是否知道圖像像素是否與屏幕像素大小相同,即圖像的右下角是否爲[589,602]?如果圖像佔用比600x600更多(或更少)的屏幕像素,則只知道一個角落不足以進行轉換。 – Jonas 2010-07-20 14:08:01

+0

@Jonas:我想知道是否可以使用屏幕上放置圖像(600 * 600)的左上角座標(800 * 800)來進行轉換? – Jessy 2010-07-20 14:23:33

0

似乎只是屏幕區域和圖像大小的比例調整座標會做:

newX = x.*(600/800) 
newY = y.*(600/800) 
+0

謝謝你...我只是想知道,如果圖像(600 * 600),在800 * 800的圖像的中心沒有放置,做它的工作原理?例如如果600 * 600圖像位於800 * 800屏幕中x,y(200,100)的起點,我們是否仍然可以使用該比例? – Jessy 2010-07-20 11:20:43

+0

@Jessy:不,你需要減去偏移量。那是因爲這些分數是以屏幕座標而不是圖像座標來衡量的嗎? – Mau 2010-07-20 11:24:04

+0

圖像是在800 * 800的像素座標中測量的。 – Jessy 2010-07-20 13:01:10