Matlab Настройка координат

У меня есть изображение размером 600 * 600, и оно отображалось на экране 800 * 800 пикселей. Координата x,y, в которой пользователь смотрит на экран, была записана в массив:

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) ?

Скажем, например, координата верхнего левого изображения 600 * 600 внутри изображения изображения 800 * 800, например. х = -10, у = 3.

Спасибо.


замещающий текст http://img9.imageshack.us/img9/8836/e47184420f.jpg< /а>


person Jessy    schedule 20.07.2010    source источник


Ответы (2)


Чтобы получить пиксели в координатах изображения, вам нужно знать, где на экране располагались нижний левый и верхний правый углы вашего изображения. Из этого вы можете рассчитать смещение и масштабирование изображения.

%# 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);
person Jonas    schedule 20.07.2010
comment
Я знал только верхнюю левую координату изображения (600 * 600), например. х= -10, у=3 - person Jessy; 20.07.2010
comment
@Jessy: bottomLeft/topRight предполагает, что [0,0] находится в левом нижнем углу экрана. Кроме того, знаете ли вы, имеет ли пиксель изображения тот же размер, что и экранный пиксель, то есть будет ли нижний правый угол изображения [589,602]? Если изображение занимает больше (или меньше) 600x600 пикселей экрана, информации только об одном углу недостаточно для преобразования. - person Jonas; 20.07.2010
comment
@Jonas: Интересно, могу ли я использовать верхнюю левую координату, в которой изображение (600 * 600), размещенное на экране (800 * 800), можно использовать для преобразования? - person Jessy; 20.07.2010
comment
@Jessy: Вы можете - если не было масштабирования изображения. Смотрите мой обновленный ответ. - person Jonas; 21.07.2010
comment
@Jonas: Спасибо. Я пытался сделать таким образом, однако координата, кажется, выходит за границы меньшего изображения. - person Jessy; 21.07.2010
comment
@Jonas: Есть ли способ, которым я могу отделить меньшее изображение от большего изображения, при этом все координаты были нормализованы в соответствии с меньшим изображением? Мне действительно нужно отделить меньшее изображение от большего изображения - person Jessy; 21.07.2010
comment
@Jessy: Если вы получили изображение слева, вы можете сегментировать изображение, т. Е. Создать новое изображение, в котором 1 везде, где изображение было белым, и 0 повсюду. Затем вы можете определить верхний левый/нижний правый углы белого квадрата. - person Jonas; 22.07.2010

Кажется, что достаточно просто настроить координаты по соотношению площади экрана и размера изображения:

newX = x.*(600/800)
newY = y.*(600/800)
person Mau    schedule 20.07.2010
comment
Спасибо... Мне просто интересно, если изображение (600 * 600) было помещено не в центр изображения 800 * 800, это работает? например если изображение 600 * 600 было помещено в начальную точку x, y (200 100) на экране 800 * 800, можем ли мы все еще использовать соотношение? - person Jessy; 20.07.2010
comment
@Jessy: нет, тебе нужно вычесть смещение. Это потому, что точки были измерены в координатах экрана, а не в координатах изображения? - person Mau; 20.07.2010
comment
изображение было измерено в пикселях с координатами 800*800. - person Jessy; 20.07.2010
comment
@Jessy: Тогда масштабирования должно быть достаточно. - person Mau; 20.07.2010
comment
@Мау: Спасибо. Но кажется, что координата кажется неправильной, когда я перевел изображение на 600 * 600. - person Jessy; 20.07.2010
comment
Опубликуйте пример. Нажмите на пиксель 3,3: что вы получите? - person Mau; 20.07.2010
comment
@Mau: Как я могу получить смещение? - person Jessy; 20.07.2010
comment
@Jessy: это координата верхнего левого угла маленького изображения в координатах большого изображения. - person Mau; 20.07.2010
comment
@Mau: это координата маленького изображения на большом изображении. - person Jessy; 20.07.2010