Matlab调整坐标

Matlab调整坐标,matlab,plot,Matlab,Plot,我有一张600*600的图像,它显示在800*800像素的屏幕上。 在阵列中记录用户在屏幕上的外观的x,y坐标: x =[250,300,390,750,760]; y =[120,550,250,130,420]; 在另一个程序中,我想在600*600图像上绘制x,y坐标。问题在于,由于坐标大于图像的最大尺寸(600*600),一些x,y图超出了图像范围(,如下图所示) 编辑: 如何将较大图像(800*800)的坐标转换/调整为较小图像(600*600),以便所有x、y坐标都位于较小图像(

我有一张600*600的图像,它显示在800*800像素的屏幕上。 在阵列中记录用户在屏幕上的外观的x,y坐标:

x =[250,300,390,750,760];
y =[120,550,250,130,420]; 
在另一个程序中,我想在600*600图像上绘制x,y坐标。问题在于,由于坐标大于图像的最大尺寸(600*600),一些x,y图超出了图像范围(,如下图所示)

编辑: 如何将较大图像(800*800)的坐标转换/调整为较小图像(600*600),以便所有x、y坐标都位于较小图像(600*600)内部

例如,假设在800*800图像的图像内部的600*600的左上图像的坐标是例如x=-10,y=3

谢谢



似乎只需根据屏幕面积和图像大小的比率调整坐标即可:

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

要获得图像坐标中的像素,您需要知道图像的左下角和右上角在屏幕上的位置。从中可以计算图像的偏移和缩放

%# 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);
话虽如此,我建议使用Matlab选择点,因为此函数直接返回图像像素


编辑

如果只有左上角,则必须希望没有任何缩放-否则,无法变换点

仅使用偏移量,上述简化为

%#定义一些参数 图像大小=[600]; topLeftPixScreen=[200100];%#屏幕像素中图像左上角的位置

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

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

谢谢你。。。我只是想知道,如果图像(600*600)不是放在800*800图像的中心,它会工作吗?e、 g.如果600*600图像被放置在800*800屏幕的x,y(200100)的起始点,我们还可以使用这个比率吗?@Jessy:不,你需要对偏移量进行细分。这是因为这些点是在屏幕坐标系中测量的,而不是在图像坐标系中测量的吗?图像是在800*800的像素坐标系中测量的。@Jessy:那个么缩放就足够了。@Mau:谢谢。但是当我转换到600*600图像时,坐标似乎不正确。我只知道图像的左上角坐标(600*600),例如x=-10,y=3@Jessy:bottomLeft/topRight假设[0,0]位于屏幕的左下角。另外,您是否知道图像像素是否与屏幕像素大小相同,即图像的右下角是否为[589602]?如果图像占用的屏幕像素数大于(或小于)600x600,仅知道一个角点不足以进行转换。@乔纳斯:我想知道是否可以使用图像(600*600)在屏幕上的左上角坐标(800*800)可以用来进行转换吗?@Jessy:你可以-只要图像没有任何缩放。看看我最新的答案。@Jonas:谢谢。我试着这样做,但是坐标似乎超出了较小图像的边界。