2010-07-20 11 views
1

J'ai une image dont la taille était de 600 * 600 et qui était affichée sur un écran de 800 * 800 pixels. Les coordonnées x, y dans lequel le regard de l'utilisateur à l'écran a été enregistré dans un tableau:Matlab Ajustement des coordonnées

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

Dans un autre programme, je veux tracer la coordonnée x, y sur l'image 600 * 600. Le problème est que certains de l'intrigue x, y étaient hors de l'image (comme indiqué sur l'image ci-dessous) puisque la coordonnée était plus que la taille maximale de l'image (600 * 600).

ÉDITÉ: Comment transformer/ajuster les coordonnées de l'image plus grande (800 * 800) dans l'image plus petite (600 * 600) afin que tous les coordonnées x, y sont à l'intérieur l'image plus petite (600 * 600) ? Disons par exemple que la coordonnée de l'image en haut à gauche du 600 * 600 à l'intérieur de l'image de l'image 800 * 800 est par ex. x = -10, y = 3.

Merci.


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

Répondre

0

Pour obtenir les pixels en coordonnées d'image, vous devez savoir où les coins en bas à gauche et en haut à droite de votre image ont été placés sur l'écran. De cela, vous pouvez calculer le décalage et le zoom de l'image.

%# 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); 

Cela dit, je suggère d'utiliser ginput pour sélectionner les points avec Matlab, puisque cette fonction retourne directement pixels d'image.


EDIT

Si vous avez seulement le coin en haut à gauche, vous devez espérer qu'il n'y a pas eu de mise à l'échelle - sinon, il n'y a aucun moyen que vous pouvez transformer les points.

avec un décalage seulement, le simplifie ci-dessus pour

% # définir certains paramètres IMAGESIZE = [600 600]; topLeftPixScreen = [200,100]; % # position du coin supérieur gauche de l'image en pixels de l'écran

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

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

Je ne connaissais que la coordonnée en haut à gauche de l'image (600 * 600), par ex. x = -10, y = 3 – Jessy

+0

@Jessy: bottomLeft/topRight suppose que [0,0] est en bas à gauche de l'écran. En outre, savez-vous si un pixel d'image a la même taille qu'un pixel d'écran, c'est-à-dire si la partie inférieure droite de l'image serait [589,602]? Si l'image occupe plus (ou moins) que 600x600 pixels d'écran, sachant qu'un seul coin n'est pas assez d'informations pour effectuer la transformation. – Jonas

+0

@Jonas: Je me demande si je peux utiliser la coordonnée supérieure gauche dans laquelle l'image (600 * 600) placée sur l'écran (800 * 800) peut être utilisée pour effectuer la transformation? – Jessy

0

Il semble que tout ajustement des coordonnées par le rapport de la surface de l'écran et la taille de l'image ferait:

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

Merci ... Je me demande si l'image (600 * 600) n'a pas été placée au centre de l'image 800 * 800, ça marche ? par exemple. si l'image 600 * 600 était placée au point de départ de x, y (200,100) dans l'écran 800 * 800, peut-on encore utiliser le ratio? – Jessy

+0

@Jessy: non, vous devez exécuter le décalage. Est-ce parce que les points ont été mesurés dans les coeurs d'écran et non dans les images? – Mau

+0

l'image a été mesurée en coordonnées pixel du 800 * 800. – Jessy

Questions connexes