2010-07-20 77 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