Matlab - Pintar lineas en una imagen

 
Vista:

Pintar lineas en una imagen

Publicado por laura (4 intervenciones) el 06/04/2011 19:29:57
Buenas tengo una dudilla, a ver si alguien me la puede resolver.

Estoy haciendo un programilla en matlab para una practica.
En ella se me pide que lea una imagen y la muestre en pantalla.

Después, el usuario tiene que meter dos puntos (cada uno con una posicíon x e y) de dicha imagen y enmarcar el espacio comprendido en ellos, es decir, crear un cuadrado alrededor de ellos (será un rectángulo o un cuadrado).
Todo ello sin que la imagen de fondo se vaya, es decir, como si hiciéra una selección y se mostrara el cuadrado en el área seleccionada.

Lo de mostrar la imagen y conseguir los puntos lo tengo ya, lo que querría saber es si habría algun método para en marcar el espacio comprendido entre esos puntos o tirar líneas de uno a otro hasta conseguir un cuadrado/rectángulo, etc.


Además de esto, ya aprovecho para preguntar si habría algún método para añadir una etiqueta en cualquier lugar de una imagen ya mostrada sin que esta se elimine.

Muchas gracias, un saludo!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Pintar lineas en una imagen

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 06/04/2011 21:30:35
HOLA LAURA.
Bueno hice un programa a lo que estas pidiendo en el foro. Puedes utilizar cualquier foto foto jpg. Cada linea esta con explicacion, porque nose tu nivel de conocimientos de MATLAB. Cuandos ejecutes, al final lleva el mouse hacia la figura y te saldra una cruz, entonces ubica la cruz en el lugar que deseas y haces click derecho. Claro que el programa se puede hacaer más genérico, es decir leer las coordenas por teclado, por el memento esta hecho para dos coordenadas fijas.
Si hay dudas vuelves a escribir en el foro.

% OBSERVACIONES:
% TANTO LA foto.jpg y el archivo en matlab deben estar en el mismo
% directorio, para que se pueda ejecutar.
clear, %borra variables de la memoria de matlab
clc, %limpia la ventana de comandos
close all % cierra todas las graficas abiertas
figure(gcf) % para q salte la figura al primer plano
fotos=imread('fotos.jpg'); % imread para leer fotos
image(fotos); % image para que visualice la foto
axis('image'); % para q visualice sin deformacion la foto
V=axis % V=[xmin,xmax, ymin, y max] dimensiones de la foto
P1=[180,60]; % P1=(P1(1),P1(2)) P1 es un valor cualquiera
P2=[30,140]; % P2=(P2(1),P2(2)) P2 es un valor cualquiera
x1=num2str(P1(1)); % num2str convierte un numero a char
y1=num2str(P1(2)); % conversion de P2(1) a char, x1 es char
x2=num2str(P2(1)); % conversion de P2(1) a char, x1 es char
y2=num2str(P2(2)); % conversion de P2(1) a char, x1 es char

% la conversion se hace porque la funcion text admite char o string
text(P1(1),P1(2),['P1(',x1,',',y1,')']) %visualiza el punto P1
text(P2(1),P2(2),['P2(',x2,',',y2,')']) %visualiza el punto P2

x=[P1(1) P1(1) P2(1) P2(1) P1(1)]; % vector de ordenadas
y=[P1(2) P2(2) P2(2) P1(2) P1(2)]; % vector abcisas
% para poder graficar el cuadrado o rectangulo
hold on % para que nose borre la foto de la ventana
plot(x,y) % dibuja el rectangulo o el cudrado
gtext('MI FOTO') % para poner un texto en cualquier lugar de la foto
% la palabra 'MI FOTO' es cualquier palabra




Saludos: JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Pintar lineas en una imagen

Publicado por Dave (1094 intervenciones) el 07/04/2011 12:41:58
Hola Laura;

Muy interesante tu aplicación, al respecto te sugiero que hagas una interfaz grafica, allí podrias programar y ejecutar todos tus requerimientos con mayor comodidad, por ejemplo:

Las lineas o recuadros los colocarías como el mouse, se puede programar para que sea algo dinamico.
Las etiquetas igualmente se colocarian en cualquier lugar sin perder la imagen.

Espero sea de ayuda.

Saludos
Dave
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pintar lineas en una imagen

Publicado por Laura (4 intervenciones) el 07/04/2011 17:40:54
Pues muchas gracias Jose, lo pruebo y te digo.

correa.dave, sí lo tengo integrado en una interfaz gráfica, lo que me piden es que introduciendo dos puntos (cada uno con su x y su y) sea capaz de hacer el rectángulo o cuadrado.

Gracias de todas formas!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pintar lineas en una imagen

Publicado por laura (4 intervenciones) el 11/04/2011 14:30:09
Muchas gracias a todos!!
Ya me realiza la acción que quería de dibujarme el rectángulo o cuadrado.

Lo de poner texto sobre la imagen también soy capaz ya de hacerlo.

Gracias a todos por vuestras respuestas!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pintar lineas en una imagen

Publicado por laura (1 intervención) el 11/04/2011 14:30:48
Muchas gracias a todos!!
Ya me realiza la acción que quería de dibujarme el rectángulo o cuadrado.

Lo de poner texto sobre la imagen también soy capaz ya de hacerlo.

Gracias a todos por vuestras respuestas!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Pintar lineas en una imagen

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/04/2011 17:55:41
Buenos dias Laura
Ayer lo iba a iba a poner el programa generico, pero estaba con sueño. bueno aqui te mando. Puedes leer las coordenadas desde el teclado.


%====================================================
%EL PROGRAMA
% OBSERVACIONES:
% TANTO LA foto.jpg y el archivo en matlab deben estar en el mismo
% directorio, para que se pueda ejecutar.
clear, %borra variables de la memoria de matlab
%limpia la ventana de comandos
close all % cierra todas las graficas abiertas
figure(gcf) % para q salte la figura al primer plano
fotos=imread('fotos.jpg'); % imread para leer fotos
image(fotos); % image para que visualice la foto
axis('image'); % para q visualice sin deformacion la foto
v=axis; % v=[xmin,xmax, ymin, y max] dimensiones de la foto
fprintf('LAS DIMENSIONES DE LA FOTO ES\n');
fprintf('Ix=[%7.4f,%7.4f] ',v(1),v(2));
fprintf('Iy=[%7.4f,%7.4f]\n',v(3),v(4));
BOL=1;
while BOL==1
P1=input('Ingrese el punto P1(x1,y1)=');
if v(1)<=P1(1) && P1(1)<=v(2) && v(3)<=P1(2) && P1(2)<=v(4)
BOL=0;
else
fprintf('El punto P1(%4.2f,%4.2f) no pertenece al foto\n',P1(1),P1(2));
end
end

while BOL==0
P2=input('Ingrese el punto P2(x2,y2)=');
if v(1)<=P2(1) && P2(1)<=v(2) && v(3)<=P2(2) && P2(2)<=v(4)
BOL=1;
else
fprintf('El punto P2(%4.2f,%4.2f) no pertenece al foto\n',P2(1),P2(2));
end
end

%P1=[180,60]; % P1=(P1(1),P1(2)) P1 es un valor cualquiera
%P2=[30,140]; % P2=(P2(1),P2(2)) P2 es un valor cualquiera
x1=num2str(P1(1)); % num2str convierte un numero a char
y1=num2str(P1(2)); % conversion de P1(2) a char, y1 es char
x2=num2str(P2(1)); % conversion de P2(1) a char, x2 es char
y2=num2str(P2(2)); % conversion de P2(2) a char, y2 es char

% la conversion se hace porque la funcion text admite char o string
text(P1(1),P1(2),['P1(',x1,',',y1,')']) %visualiza el punto P1
text(P2(1),P2(2),['P2(',x2,',',y2,')']) %visualiza el punto P2

x=[P1(1) P1(1) P2(1) P2(1) P1(1)]; % vector de ordenadas
y=[P1(2) P2(2) P2(2) P1(2) P1(2)]; % vector abcisas
% para poder graficar el cuadrado o rectangulo
hold on % para que nose borre la foto de la ventana
plot(x,y) % dibuja el rectangulo o el cudrado
gtext('MI FOTO') % para poner un texto en cualquier lugar de la foto
% la palabra 'MI FOTO' es cualquier palabra
hold off
%====================================================


%========================================
%EJECUCION EN LA VENTANA DE COMANDO.

>> fotojose
LAS DIMENSIONES DE LA FOTO ES
Ix=[ 0.5000,205.5000] Iy=[ 0.5000,238.5000]
Ingrese el punto P1(x1,y1)=[100 150]
Ingrese el punto P2(x2,y2)=[50 200]

>> fotojose
LAS DIMENSIONES DE LA FOTO ES
Ix=[ 0.5000,205.5000] Iy=[ 0.5000,238.5000]
Ingrese el punto P1(x1,y1)=[500 200]
El punto P1(500.00,200.00) no pertenece al foto

Ingrese el punto P1(x1,y1)=[50 2000]
El punto P1(50.00,2000.00) no pertenece al foto

Ingrese el punto P1(x1,y1)=[50 60]

Ingrese el punto P2(x2,y2)=[500 200]
El punto P2(500.00,200.00) no pertenece al foto

Ingrese el punto P2(x2,y2)=[50 600]
El punto P2(50.00,600.00) no pertenece al foto

Ingrese el punto P2(x2,y2)=[150 210]
%============================================



Saludos: JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
PROGRAMADOR EN MATLAB.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE  JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Pintar lineas en una imagen

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/04/2011 18:05:06
Hola Laura.
Segun veo estas haciendo un interfaz grafica, es eso bueno, porque en un interfaz grafica tu puedes ponerles colores y se muy bien.
Solo que un programa hecho en interfaz grafica no se puede golgar por el foro, no es tan simple, si te copio el codigo de interfaz grafica al foro,simplemente no va a funcionar. Cuando lo ejecutes.
Pero se puede hacer.
En estos dias lo haré, para ver como queda.

Saludos: JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
PROGRAMADOR EN MATLAB.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Pintar lineas en una imagen

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 08/04/2011 01:05:07
Hola Laura.
Este programa es mas genérico. Introduces por el teclado el numero de lados del poligono que deseas dibujar y se dibujara automaticamente haciendo clic izquierdo con el mouse la cantidad de veces que el numero que introducistes por el teclado. Ademas para dibujar un rectangulo, solo haces clic izquierdo dos veces, y los puntos que haces clic izquierdo seran los vertices del rectangulo. Bueno ejecutalo el programa y veras lo que hace.

%====================================================
% EL PROGRAMA
% OBSERVACIONES:
% TANTO LA foto.jpg y el archivo en matlab deben estar en el mismo
% directorio, para que se pueda ejecutar.
clear, %borra variables de la memoria de matlab
%clc, %limpia la ventana de comandos
close all % cierra todas las graficas abiertas
figure(gcf) % para q salte la figura al primer plano
fotos=imread('fotos.jpg'); % imread para leer fotos
image(fotos); % image para que visualice la foto
axis('image'); % para q visualice sin deformacion la foto
V=axis; % V=[xmin,xmax, ymin, y max] dimensiones de la foto
n=input('Ingrese el numero lados del poligono n:');
hold on % para que nose borre la foto de la ventana

[x,y]=ginput(n);
x=[x;x(1)]; y=[y;y(1)];
plot(x,y)
for i=1:length(x)-1;
text(x(i),y(i),['P',num2str(i),'(',num2str(x(i)),',',num2str(y(i)),')'])
end

[X,Y]=ginput(2);
P1=[X(1) Y(1)]; % P1=(P1(1),P1(2)) P1 es un valor cualquiera
P2=[X(2) Y(2)]; % P2=(P2(1),P2(2)) P2 es un valor cualquiera
xx=[P1(1) P1(1) P2(1) P2(1) P1(1)]; % vector de ordenadas
yy=[P1(2) P2(2) P2(2) P1(2) P1(2)]; % vector abcisas
% para poder graficar el cuadrado o rectangulo
x1=num2str(P1(1)); % num2str convierte un numero a char
y1=num2str(P1(2)); % conversion de P2(1) a char, x1 es char
x2=num2str(P2(1)); % conversion de P2(1) a char, x1 es char
y2=num2str(P2(2)); % conversion de P2(1) a char, x1 es char
% la conversion se hace porque la funcion text admite char o string
text(P1(1),P1(2),['P1(',x1,',',y1,')']) %visualiza el punto P1
text(P2(1),P2(2),['P2(',x2,',',y2,')']) %visualiza el punto P2
plot(xx,yy,'r')% dibuja el rectangulo o el cuadrado
%====================================================

%========================================
%EJECUCION EN LA VENTANA DE COMANDO.
>> fotojose2
Ingrese el numero lados del poligono n:3


Saludos:
JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
PROGRAMADOR EN MATLAB.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como

Publicado por Abel (1 intervención) el 27/05/2012 18:20:48
Como puedo trazar una linea pero directamente en la matriz de la imagen. supongamos tengo una imagen binaria con las coordenadas del punto A (y1,x1) y las coordenadas del punto B(y2,x2)

Como puedo trazar una linea paralela del punto A al punto B, pero no solo que lo muestre en "plot" si no que trace la linea directamente en la matriz!!!


Gracias por su tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como marco el centro geometrico de la imagen

Publicado por Humberto Tolaba (1 intervención) el 25/08/2014 13:16:00
Hola estimados, dentro de un axes debo colocar una imagen, y quiero marcar un punto que me coincida con el centro de la misma... te paso la instruccion usada. El problema es que la ubicacion no coicide con la de la imagen, por que preciso q sea deacuerdo a la ubicacion (x,y) del pixel

im=imread('HS_1.bmp');
umbral=graythresh(im);
imbw=im2bw(im,umbral);
[w h] = size(im);
A=0;
m=1;
posx=[];
posy=[];
for x=1:w
for y=1:h
A=imbw(x,y);
if(A~=0)
posx(m)=x;
posy(m)=y;
m=m+1;
end
end
end
xx=w-round((max(posx)-min(posx))/2);
yy=h-round((max(posy)-min(posx))/2);
imshow(imbw);
hold on
plot(xx, yy, 'rx-')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pintar lineas en una imagen

Publicado por Marina (19 intervenciones) el 28/08/2014 09:40:14
Hola Laura!
Ya sé que ha pasado mucho tiempo pero igual puedes ayudarme. Estoy realizando un proyecto en el que sigo la trayectoria de varios puntos a tiempo real a lo largo del tiempo. Tengo el programa ya hecho y funcionando y ahora lo que me interesaría es poder guardar una imagen de cuando el usuario indica qué puntos quiere seguir, y marcar el orden en el que ha metido los puntos (para luego poder identificarlos en las gráficas). Vamos que lo que quiero es que me ponga un numerito al lado del punto que ha seleccionado.
Como es un problema similar al tuyo me ha parecido que igual me podrías ayudar.
Muchas gracias!
Marina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar