我有尺寸为600 * 600的图像,并且在800 * 800像素屏幕上显示。 用户在屏幕上看到的x,y坐标记录在一个数组中:
x =[250,300,390,750,760];
y =[120,550,250,130,420];
在其他程序中,我想绘制600 * 600图像上的x,y坐标。问题是某些x,y图不在图像中(如下图所示),因为坐标多于图像的最大尺寸(600 * 600)。
EDITED: 如何将较大图像(800 * 800)的坐标转换/调整为较小的图像(600 * 600),使所有x,y坐标内较小的图像(600 * 600)?< / p>
让我们说,例如,800 * 800图像的图像内的600 * 600的左上图像的坐标是例如。 x = -10,y = 3.
感谢。
答案 0 :(得分:0)
似乎只需按屏幕区域和图像尺寸的比例调整坐标即可:
newX = x.*(600/800)
newY = y.*(600/800)
答案 1 :(得分: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);