Título: [PROYECTO] Procesamiento digital de imagen - Seguimiento de color por webcam Publicado por: LixKeÜ en 8 Febrero 2011, 10:28 am Hola a todos ;-). Voy a tratar de explicar mas o menos que es el procesamiento digital de imagen y las utilidades que tiene este campo hoy en día y la amplia utilidad de la misma.
Las imágenes digitales son una matriz ó arreglo rectangular de elementos que, usualmente son números reales. En este caso trabajaremos con imágenes RGB, es decir los colores de cada pixel de la imagen estará representado mediante la combinación de los colores rojo, verde y azul, cada uno en diferente proporción. La combinación RGB estándar indica 256 niveles por cada canal, es decir por cada color rojo, verde o azul. Para representar el valor de 256, requerimos de 8 bits para cada canal de color. Lo que nos permite una combinación del orden 2563 lo que nos permite una combinación de casi 17 millones de colores. (16,777,216).
Código: |(234,067,098) (003,078,067) (056,004,006)| Como las imágenes son una matriz de números podemos hacer operaciones de la álgebra lineal y de este modo realizar filtros para poder obtener una cierta información de la imagen ó realizar cambios en la misma para una mejor compresión del objeto al cual se esta viendo. En este programa lo que se hace es habilitar la webcam para la toma de imágenes y capturar la imagen en un picture secundario el cual luego esa imagen la leemos, el valor de cada pixel osea los valores RGB. Esta es la parte encargada de realizar esa operación: Código: modulo: MatrizImagen Con eso leemos el valor del RGB que compone el color del pixel, por ejemplo: el color ROJO es (255,0,0), el VERDE es (0,255,0), y así las combinaciones van formando los diferentes tonos. 1.1 Detección de color rojo En este programa trataremos de detectar el color rojo para ello usaremos una cierta tolerancia de detección dada por el hscrollbar. Código: '++++++++++++++++++++++detecta el color rojo+++++++++++++++++++++++++++++++++++ Con esto detectamos el color rojo y luego con la posición de los pixel rojo dentro del picture, hacemos un promedio y dibujamos un circulo :P. En el segundo ejemplo voy a pasar la imagen a binario, pero primero voy a tratar de hacerla en escala de gris. 1.2 Escala de Grises: Las conversiones entre las imágenes de color y las imágenes en escala de grises no son del todo directas. El ajuste de escala de grises consiste en la multiplicación de cada componente por 3 constantes definidas: Alfa, Beta y Gamma. Posteriormente se promedian las intensidades obtenidas en cada canal . Este proceso sustrae toda la información de color que contiene cada pixel y nos deja una separación de 255 niveles entre el blanco y el negro. Estas 3 constantes se obtienen como la separación entre los canales RGB y el negro: Alfa: Separación entre el rojo y el negro. (0.299) Beta: Separación entre el verde y el negro. (0.599) Gamma: Separación entre el azul y el negro. (0.111) Código: '+++++IMAGEN EN ESCALA DE GRIS++++++++++++++ Código: Y = Int((0 + Rojo1 + Verde1 + Azul1) / 3) 1.3 Imagen binaria: Ahora para convertirlas en binario osea 255 ó 0 debemos tomar una cierta tolerancia para considerarla negro ó blanco, en este caso mi valor en el cual considero blanco a todo aquello mayor a 100. Código: If Y > 100 Then Y por ultimo solo me queda guardar los cambios en la imagen y listo :xD Código: lpBits1(ContadorX1, ContadorY1) = Y
Código: Public Declare Function CreateDIBSection Lib "gdi32" (ByVal hDC As Long, pBitmapInfo As BITMAPINFO24, ByVal un As Long, lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long 'Si la función tiene éxito, el valor de retorno es un manipulador de lo creado DIB, y * ppvBits recién puntos al bit los valores de mapa de bits.Si la función falla, el valor de retorno es NULL, y ppvBits * es NULL. Espero que se puede seguir con este proyecto para realizar diferentes utilidades y para la investigación, yo por lo pronto estoy tratando de hacer la deteccion de contornos para poder identificar formas de objetos y medidas pero estoy con lo teórico recien XD. Les dejo ademas unos artículos sobre tratamiento de imágenes que me ayudaron en mucho y que me van a seguir ayudando jaja. (http://img823.imageshack.us/img823/2356/visiono.png)
Código: http://www.gigasize.com/get.php?d=s3nqrhtnfpf 1.4 Invertir colores (Negativo): Esta operación consiste en invertir cada canal RGB a su negativo (Sí, suena redundante). Por ejemplo, en una película fotográfica en la cual se plasman los colores invertidos de la imagen real. Esto es que el blanco pasa a ser negro, el azul a amarillo, verde a magenta y rojo a cyan. La utilidad de este filtro, se encuentra en la digitalización de películas fotográficas. Código: Operacion del ajuste: [(255-R),(255-G),(255-B)] Código: For ContadorY1 = 0 To Pic.ScaleHeight - 1 1.5 Detección de contornos (by 79137913) Esta técnica utiliza el cambio numérico dado por los pixel (en escala de gris) de un entorno del mismo. Cuando estos cambios son menores a un valor dado (en este caso 9) es por que en el existe un entorno ó borde. ΔX = X1-X2 Código: Dim tmp1 As Integer, tmp2 As Integer, tmp3 As Integer Título: Re: [PROYECTO] Procesamiento digital de imagen - Seguimiento de color por webcam Publicado por: 79137913 en 8 Febrero 2011, 11:42 am HOLA!!!
Mira, aca te dejo mi funcion (con ayuda de LeaA) que marca contornos y piel (por separado) espero que te sirva! http://goo.gl/fi9DX GRACIAS POR LEER!!! Título: Re: [PROYECTO] Procesamiento digital de imagen - Seguimiento de color por webcam Publicado por: LixKeÜ en 8 Febrero 2011, 12:10 pm Esta bueno el método para detectar el contorno, es una diferencial. Yo intente esa forma pero no me gusta mucho detectar máximos jeje. Estoy por probar alguna forma de convolucion. La forma de detectar piel no se si servirá mucho para lo q necesitas. Creo q para detectar rostros tendrías q mirar un poco la parte geometrica de la cara
Título: Re: [PROYECTO] Procesamiento digital de imagen - Seguimiento de color por webcam Publicado por: LeandroA en 8 Febrero 2011, 15:56 pm buena LixKeÜ seguis con el proyecto, espero que le puedas sacar lo maximo
Saludos. Título: Re: [PROYECTO] Procesamiento digital de imagen - Seguimiento de color por webcam Publicado por: Psyke1 en 9 Febrero 2011, 16:27 pm Sin duda alguna tiene muy buena pinta, más tarde le hecho un vistazo! :P
DoEvents! :P |