Programación Específica > Matlab

 precesar imagen.....

(1/3) > >>

Froddo:
Hola a todos, les cuento:

  He tenido varios problemas al reconocer un color,principalmente por la camara web que no era muy buena(ahora esta arreglado), el cuento es que necesito insertar una sentencia de comparación del color, osea:

if (la foto tomada tiene rojo)
sentencia a aplicar..
end

He intentado cercar el punto de interes (roi)de la foto,para comparar los bits de esta matriz, pero sin mucho éxito....,ya que muchas veces el roi no coincide con el color rojo.

Les puedo comentar que el programa reconoce el color rojo, luego de bastantes pruebas puedo decir que ese tema esatá solucionado, ya que en el camino hubo problemas de brillo en el color, iluminación etc.,para que tengan una idea si la imagen tiene color rojo en la esquina superior izquierda, la imagen mostrada por matlab después del procesamiento es rojo en la esquina izq. y negro en el resto.


--- Código: Text --- cam=videoinput('winvideo');preview(cam);for 0:15;pause(1);foto=getsnapshot(cam);%consigue la foto de la cámarab=rgb2hsv(foto);%cambio al plano HSVH=b(:,:,1);plano Huec = H(:,:,1)>0.92; %rango del color rojoc = uint8(c);%acontinuación ve el rojo en los tres planosred(:,:,1) = foto(:,:,1).*c;red(:,:,2) = foto(:,:,2).*c;red(:,:,3) = foto(:,:,3).*c;%luego se puede juntar el resultado y mostar solo el color %deseado conimshow(red)end  la imagen mostrada va ser solo el rojo, pero no se en que parte el programa reconoce el color como para decir si hay rojo haces esto..ojala que se comprenda mi problema..
Bueno,me despido y gracias de antemano..
Salu2 :beer: :kicking:

Geo:
Disculpa, no entendí muy bien cuál es tu problema.

El código que colocaste tiene un par de errores (debes haber copiado mal), lo que hace es buscar los pixeles en la imagen que en el espacio de color HSV tienen un valor de H > 0.92 y el resto de pixeles los elimina (los pone en un valor 0).

La matriz c guarda valores 0 y 1 para cada pixel de la imagen original, donde un 1 indica que el pixel que corresponde a esa posición en la imagen tiene un valor H > 0.92, por lo tanto, si deseas ejecutar una acción si encuentras pixeles con H>0.92 una alternativa es recorrer la matriz c y evaluar si los valores son 1 o 0, ahí es donde podrías ejecutar la acción que desees.

Froddo:
Muchas gracias por responder,
sobre el código, podrias decier donde esta el problema...,ya que no lo puedo ver, o te refieres que el código tiene errores para lograr el objetivo final???

Sobre el punto de comparación, una idea que estado inplementando es que ocupar el comando
max(max(c)), ya que con esto aprovecho el hecho de tener la matriz con 1 y ceros., osea modificar el código y tener algo asÍ:

--- Código: Text --- cam=videoinput('winvideo'); preview(cam); for 0:15;pause(1);foto=getsnapshot(cam);%consigue la foto de la cámara b=rgb2hsv(foto);%cambio al plano HSV H=b(:,:,1);plano Hue c = H(:,:,1)>0.92; %rango del color rojo c = uint8(c);if (max(max(c)==1);%aca pongo la sentencia que quiero..endend  el problema que noto es que despreocupo los otros planos(el de saturacion y brillo),por eso a veces muestra pixeles blancos...,ya que  no puedo aplicar este comando

--- Código: Text --- c=H(:,:,1)>0.96 && H(:,:,2)>0.2 && H(:,:,2)<0.8 && H(:,:,3)>0.4 && H(:,:,3)<0.7;  en matlab sale el siguiente error:
??? Operands to the || and && operators must be convertible to logical scalar values.



Bueno me despido y espero que me ayuden.....
Muchas gracias de antemano...
Salu2 :kicking:  :kicking:

Geo:
El código está bien, me refería a que si copio y pego me da un error con un comentario que no tiene %, y otro con la función rgb2hsv, que me parece debieras aplicar a foto y no a la variable cam.

En el código que pusiste con &&, no puedes hacer eso, primero, los valores de HSV los debes tomar de la matriz b, resultado de la conversión rgb2hsv, no de la matriz H como pusiste.

Froddo:
gracias compañero nuevamente, tienes razón,he tenido un error al copiar el program, en la funcion para rgb2hsv y el comentario está arreglado(la pagina dejo el comentario en 2 lineas,ya que lo escribí sólo en una)..

Sobre tu consejo, voy a tomar los valores de la matriz b y te cuento que pasa..

Salu2 y gracias nuevamente.... :D  :D ..

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa