• Lunes 23 de Diciembre de 2024, 18:18

Autor Tema:  Imágen Matlab  (Leído 26973 veces)

Quicksilver

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
Imágen Matlab
« en: Sábado 17 de Mayo de 2008, 06:46 »
0
Cofrades, como siempre, tratando de llegar aca con buenas dudas, hoy traigo una buena, jejeje.        :hola:

Hace rato programando, traté de reconocer colores con una cámara web, sin exito, pues por ahora, no  tengo la menor idea de como reconocer determinado color (por ejemplo, el rojo, o el amarillo).      :unsure:

Siendo mas breve, quisiera preguntarles, como de una imágen, en RGB, una imágen proveniente de una web cam, puedo reconocer un canal o un color en especifico, en este caso, el amarillo, espero pues que alguna de vuestras mentes tenga la respuesta.

Muchisimas gracias de antemano, un saludo a todos.
Everything that has a beginning has an end

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: Imágen Matlab
« Respuesta #1 en: Lunes 19 de Mayo de 2008, 18:10 »
0
esto es un poco mas complicado de lo que a simple vista aparenta...

mira .. una imagen en RGB es una matriz de M*N *3 ,largo , ancho y los tres planos de color: rojo, verde y azul ...asi que si quisieras detectar algo en rojo por ejemplo podrias  analizar su valor RGB y te daras cuenta que el canal en rojo es alto, cercano a 255( ques es lo maximo que puedes tener si manejas color de 8 bits)  pero te daras cuenta que aun tengas ciertos valores de verde y de azul, cercanos 0...dependiendo de que tan puro sea su tono de rojo (lo cual no es posible con una camara web) asi que tendrias que aplicar algunas tecnicas de umbral para limpiar tu imagen (es decir, hacer un preprocesamiento de la imagen capturada ), para una imagen en amarillo es mas complicado porque el amarillo es la suma del rojo y del verde, esto es un pixel amarillo tiene altos valores de rojo y de verde y pocos de azul...

ademas todo esto tambien se ve afectado por la iluminacion y la calidad de la camara web
mi consejo...
empieza haciendo un filtrado de tu imagen y luego aplicale un umbral para ver que tan bien se ajusta y como responde tu camara web


suerte

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Imágen Matlab
« Respuesta #2 en: Martes 20 de Mayo de 2008, 07:58 »
0
En primer lugar, debes saber cómo se representan los colores, qué son los pixeles y cómo están constituídos (allisap lo menciona). (En Matlab, una imagen es una matriz, si es a color, son tres matrices, una por cada componente: rojo, verde y azul).
Para detectar un color, si es muy específico, podrías examinar los pixeles e ir marcando aquellos que coincidan con los valores numéricos del color que buscas, el problema es que esto es altamente selectivo y probablemente no "detectes" pixeles de color semejante pero que por su valor numérico no coinciden con el que buscas, de allí que umbralizar sea una buena alternativa.

Por poner un ejemplo, si buscaras un color rojo puro, buscarías todos los pixeles que en la imagen tengan valores de 255, 0 y 0 para sus tres componentes: rojo, verde y azul, respectivamente.
La imaginación es el límite.
Hardware & Software | Mexchip

Quicksilver

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
Re: Imágen Matlab
« Respuesta #3 en: Sábado 7 de Junio de 2008, 06:37 »
0
Cofrades, camaradas, he logrado hacer el reconocimiento de color... os pondré elcódigo mas abajo, y lo explicaré un poco, espero pues que les sirva.




Código: Text
  1.  
  2.  
  3. canalvideo=videoinput('winvideo',1);
  4. preview(canalvideo);
  5. frame=getsnapshot(canalvideo);
  6. %image(frame);
  7. delete(canalvideo);
  8.  
  9. prompt = {'Nombre:'};
  10. title = 'ANALISIS CORNEAL';
  11. lines = 1;
  12. def = {'mi imagen'};
  13. answer = inputdlg(prompt,title,lines,def);
  14. assignin('base','imfile',answer{1});
  15.  
  16.  
  17. imwrite(frame,strcat(answer{1},'.jpg')); % guarda la imagen , se usa strcat
  18. %porque se van a introducir muchas imagenes, concatena el nombre con la
  19. %extension (primera vez)
  20.  
  21. % %T=dir('*.jpg');
  22. % a=imread(T.name); otra OPCIONNNNNNNNNN
  23.  
  24.  
  25. %a=imread(strcat(answer{1},'.jpg')); % lee
  26.  
  27.  
  28.  
  29.  
  30. % planeR=a( :, :,1)&#59;% reconoce la intensidad del color rojo en la imagen
  31. % planeG=a( :, :,2)&#59;% reconoce la intensidad del color verde en la imagen
  32. % planeB=a( :, :,3)&#59;% reconoce la intensidad del color azul en la imagen
  33. %
  34. % imwrite(planeR,'plano1.jpg');
  35. % imwrite(planeG,'plano2.jpg');
  36.  
  37. % EL COLOR AMARILLO SE OBTIENE ENTRE EL PLANO ROJO Y EL PLANO VERDE,QUE
  38. % CORRESPONDEN AL PLANO1 Y AL PLANO2, POR ESTO DEBEMOS HACER EL PLANO 3
  39. % OSEA EL AZUL EN NEGRO
  40.  
  41. %a(:,:,3)=0;% el plano tres azul lo vuelva negro (hace cambio)}
  42. %imwrite(a,strcat(answer{1},'.jpg')):con esto nos imprime amarillo rgb
  43.  
  44. b=rgb2hsv(frame);%pase a HSV frame
  45. H=b(:,:,1);%en c guaradmos el plano h
  46. amarillo = 0.12;
  47. precision = 0.1;
  48. c = H(:,:,1)>(amarillo-precision) & H(:,:,1)<(amarillo+precision);
  49. c = uint8(c);
  50.  
  51. imgAmarillos(:,:,1) = frame(:,:,1).*c;
  52. imgAmarillos(:,:,2) = frame(:,:,2).*c;
  53. imgAmarillos(:,:,3) = frame(:,:,3).*c;
  54.  
  55.  
  56.  
  57. %b(:,:,2)=0;%el plano H lo volvemos cero
  58. %b(:,:,3)=0;
  59.  
  60. %if (c>=0.2) &  (c<=0.3) %la intensidad
  61.  
  62. %imwrite(c,strcat(answer{1},'1','.jpg'))%guarda plano h en el intervalo de intensidad
  63.  
  64. %end
  65.  
  66.  imwrite(imgAmarillos,strcat(answer{1},'1','.jpg'))
  67.    
  68.    
  69. %imwrite(frame,strcat(answer{1},'.jpg'))%guarda el nuevo cambio
  70.  
  71.  
  72. figure; % la pantalla con las imagenes
  73. subplot(2,2,1);% que lleve una imagen a la primera posicion
  74. imshow(frame);% mostrar la primera foto en esa primera posicion
  75. subplot(2,2,2);%que lleve una imagen a la segunda posicion
  76. imshow(imgAmarillos);%mostrar la imagen amarilla en la segunda posicion
  77.  
  78.  
  79. %imwrite(planeB,'plano3.jpg');
  80.  
  81.  
  82. beep;
  83.  
  84.  
  85.  

No lo he hecho como algunos me sugirieron, pero he logrado un muy buen resultado y tampoco lo he hecho en el plano RGB, pues en este plano, tengo un rango mucho mas grande del color amarillo, lo he logrado en el plano HSV, especificamente en el plano H, espero pues que analicen el código, cualquier duda, será bienvenida, y cualquier sugerencia también.
Everything that has a beginning has an end

jonathan2908

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Imágen Matlab
« Respuesta #4 en: Martes 9 de Diciembre de 2008, 04:56 »
0
Hola

Al estar revisando el foro veo que me podrias dar una mano, mira me encargaron hcer el recocimiento de los faros de un auto si estos se encuentran encedidos.
y al leer este post creo me podrian orientar por aca tambien. el programa no es muy elavorado las fotos son de autos y estos siempre esan en una pista a la misma altura, bien con los faros encendidos o bien con los faros apagados. mi idea seria algo asi.

1.-Cargar la imagen
2.-aplicar una mascara a mi
3.-Convertirla a escala de grises.
4.-Realizar el histograma de la imagen, dependiendo si hay una cierto valor de blanco dar una respuesta afirmativa.

Ahora con respecto al codigo estoy un poco perdido.

jonathan2908

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Imágen Matlab
« Respuesta #5 en: Viernes 12 de Diciembre de 2008, 07:14 »
0
Hola por favor puedes revisar, el codigo ya que no dispongo del matlab, pero tengo que hacer la presentacion de la idea o de una avance.

clear all;
close all;
clc;

I=imread('auto.jpg');

figure(1);imshow(I)

%Necesitamos delimitar nuestra zona de interese de la imagen.
zona = I(1500:2140, 200:1000,:);

%Con esto se convierte a escala de grises?.

figure; imagesc(zona); colormap gray; axis image; grid

histograma = imhist(zona);
figure; plot(histograma); grid

% COmo hago para que si pasa cierto valor del umbra este mueste un mesajito o algo que diga que esta encendido los faros. Gracias.
umbral1 = 120;  
pbn = zona<umbral1;
figure; imagesc(pbn); colormap gray; axis image; grid

OUT-INT FAVIAN

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
TOMA Y ALMACENAMIENTO DE IMAGENES
« Respuesta #6 en: Martes 10 de Febrero de 2009, 05:07 »
0
UN COORDIAL SALUDO A TODOS, BUENO RESULTA QUE ESTOY HACIENDO UN PROGRAMA EN MATLAB CON IMAGENES Y TENGO UNA DUDA Y AGRADECERIA QUE ME AYUDARAN,  jejeje.  

estoy tratando de hacer un programa que me tome una foto cada segundo o dos segundo y las almacene en al algun lugar:

Mi duda es como puedo tomar la imagen cada segundo hasta llegar a un tiempo de 15 minutos y almacenar la imagen que toma, PARa su correspondiente procesamiento. :good:

siendo mas claros!!!el procesamiento ya casi lo tengo pero tengo problemas con la toma de imagenes y su almacenamieno - procesamiento por tiempo. :comp:

AGRADEZCO  APORTES, IDEAS, EN FIN :D

LuisDa

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Imágen Matlab
« Respuesta #7 en: Jueves 12 de Febrero de 2009, 09:41 »
0
Cita de: "Geo"
En primer lugar, debes saber cómo se representan los colores, qué son los pixeles y cómo están constituídos (allisap lo menciona). (En Matlab, una imagen es una matriz, si es a color, son tres matrices, una por cada componente: rojo, verde y azul).
Para detectar un color, si es muy específico, podrías examinar los pixeles e ir marcando aquellos que coincidan con los valores numéricos del color que buscas, el problema es que esto es altamente selectivo y probablemente no "detectes" pixeles de color semejante pero que por su valor numérico no coinciden con el que buscas, de allí que umbralizar sea una buena alternativa.

Por poner un ejemplo, si buscaras un color rojo puro, buscarías todos los pixeles que en la imagen tengan valores de 255, 0 y 0 para sus tres componentes: rojo, verde y azul, respectivamente.

Más que umbralizar, yo lo llamaría cuantificar. Si buscamos rojos más o menos claros, podemos definir un rango de decisión (por ejemplo, de 240 a 255) a partir del cual forzamos el rojo a 255.

Deberás entonces situar un cuantificador por cada banda (R, G y B), y el intervalo de cuantificación deberá ser tanto más estrecho cuanto más selectivo quieres que sea tu cuantificador.

OUT-INT FAVIAN

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Imágen Matlab
« Respuesta #8 en: Jueves 12 de Febrero de 2009, 19:48 »
0
ok... creo que si seria mas efectivo crear un umbral para detectar un color, por lo tanto he decidido identificar el color negro y compararlo con lo que ingrese a la imagen en el programa...  :comp: agradezco el aporte y mas adelante colgare el programa por si las dudas!!estare programando :good:

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: TOMA Y ALMACENAMIENTO DE IMAGENES
« Respuesta #9 en: Domingo 22 de Febrero de 2009, 07:13 »
0
Cita de: "OUT-INT FAVIAN"
Mi duda es como puedo tomar la imagen cada segundo hasta llegar a un tiempo de 15 minutos y almacenar la imagen que toma, PARa su correspondiente procesamiento. :good:
Utiliza una función 'callback' de tipo temporizador.
La imaginación es el límite.
Hardware & Software | Mexchip

jcalonso

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Imágen Matlab
« Respuesta #10 en: Martes 10 de Marzo de 2009, 20:13 »
0
hola, soy nuevo en el procesamiento de imagenes pero estoy muy interesado, me preguntaba si me podrian recomendar una buena bibliografia ya que no llevo matlab en mi esc, tambien cheque el codigo y me preguntaba, de donde o como suspiste el rango para buscar el amarillo? espero me ayuden saludos! :)

1ntoxica2

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Imágen Matlab
« Respuesta #11 en: Jueves 3 de Septiembre de 2009, 03:41 »
0
Que tal quisiera saber si podria ayudarme con esta duda...

e buscado en el itnernet algun tipo de ayuda pero no lo logro tener... ya he logrado obtener la imagen de mi webcam por medio del matlab, pero ahora lo que busco es adquirir la imagen de una camara IP por medio del matlab, espero alguien pueda ayudarme.