sábado, 3 de noviembre de 2012

Ejemplo Transformada Hough Matlab


clc
clear all
close all

imagen=imread('linea.bmp');
subplot(2,2,1)
imshow(imagen)

title('Imagen Original')

%Binarización imagen
level=graythresh(imagen);
bn=im2bw(imagen,level);
subplot(2,2,2)
imshow(bn)

title('Imagen Binarizada')

%preprocesamiento
bn=edge(bn,'sobel','vertical');
subplot(2,2,3)
imshow(bn)

title('Imagen filtrada: detec. de bordes')

subplot(2,2,4)
imshow(imagen);

[H,T,R]=hough(bn);
peaks=houghpeaks(H,5);
lines=houghlines(bn,T,R,peaks);

hold on

max_len=0;

for k=1:length(lines)
xy=[lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
% dibuja el principo y el final de cada segmento
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');

% dibuja el segmento
len=norm(lines(k).point1 - lines(k).point2);
        if( len > max_len)
        max_len = len;
        xy_long = xy;
        end
end

title('Imagen original y 5 primeras líneas')



Transformada Hough



La transformada de Hough es una técnica de extracción de función usado en análisis de imágenes, visión artificial y procesamiento digital de imágenes. Se basa en el reconocimiento de patrones en imágenes que permite encontrar ciertas formas dentro de una imagen, como líneas, círculos, etc. 

La versión más simple consiste en encontrar líneas. Su modo de operación es principalmente estadístico y consiste en que para cada punto que se desea averiguar si es parte de una línea se aplica una operación dentro de cierto rango, con lo que se averiguan las posibles líneas de las que puede ser parte el punto. Esto se continúa para todos los puntos en la imagen, al final se determina qué líneas fueron las que más puntos posibles tuvieron y esas son las líneas en la imagen.


El caso más sencillo de transformada de Hough es la transformación lineal para la detección de líneas rectas. En el espacio de la imagen, la línea recta se puede describir como y = mx + b , y puede ser trazada gráficamente para cada par de puntos de imagen ( x , y ). En la transformada de Hough, una idea principal es considerar las características de la línea recta en términos de el parámetro de la pendiente m y el parámetro de intersección b . Basándose en este hecho, la línea recta y = mx + b puede ser representado como un punto ( b , m ) en el espacio de parámetros. Sin embargo, uno se enfrenta al problema de que las líneas verticales dan lugar a valores sin límites de los parámetros m y b. Por lo que es mejor usar un par diferente de parámetros, las coordenadas polares, denotando  y , para las líneas en la transformada de Hough. 

El parámetro  representa la distancia entre la línea y el origen , mientras que es el ángulo del vector desde el origen a este punto más cercano. Usando esta parametrización, la ecuación de la recta se puede escribir como:



Implementación

El resultado de la transformada de Hough se almacena en una matriz que a menudo se llama un acumulador. Una dimensión de esta matriz son los ángulos θ y la otra dimensión son las distancias r, y cada elemento tiene un valor sabe cuántos puntos / píxeles están situados en la línea con parámetros (r, θ). Así el elemento con el valor más alto indica qué línea que está mejor representado en la imagen de entrada.




Ver más en Huogh Transform

lunes, 29 de octubre de 2012

Shimon Schocken: El curso de computación auto-organización


Shimon Schocken y Noam Nisan desarrollaron un plan de estudios para que sus estudiantes construyeran una computadora, pieza a pieza. Cuando pusieron el curso en línea ofreciendo herramientas, simuladores, especificaciones de chips y otros bloques de construcción, se sorprendieron al ver la avalancha de miles de personas dispuestas a no dejar pasar la oportunidad de aprender, trabajar en forma independiente, así como de organizar sus propias clases en el primer MOOC (Massive Open Online Course). Invita a olvidarse de las calificaciones porque estas le quitan la diversión al fracaso, como lo dice Winston Churchill "El éxito es la capacidad de ir de un fracaso a otro sin perder el entuciamo" de esta manera para lograr grandes cosas solo se debe tener una enorme pasión por aprender.

Además Shimon Schocken y Noam Nisan desarrollan una aplicación didáctica para niños que les permite aprender matemáticas y geometría. Es una aplicación muy intuitiva que permite al niño desarrollar su conocimiento de una forma muy divertida.

lunes, 15 de octubre de 2012

¿Por qué todos tienen tanto afán?


La gente está en un gran afán de aprender acerca de las computadoras es por eso que muchos sitios en la web prometen aprender a programar en un par de días u horas.

Los investigadores han mostrado que toma aproximadamente diez años desarrollar Sabiduría,experiencia y habilidad en cualquiera de una amplia variedad de áreas, incluyendo la música, la pintura, los deportes, entre otras.

No parece que existan atajos, la clave es la práctica lo cual permite desafiarse a sí mismo con una tarea que está más allá de su capacidad actual, tratando de ella, el análisis de su rendimiento y después de hacerlo y corregir cualquier error.

Algunas personas ya tienen las cualidades necesarias para ser un gran diseñador, como crítico de Gusteau, Anton Ego, dice: "No todo el mundo puede convertirse en un gran artista, pero un gran artista puede venir de cualquier parte." Así que comprar un libro de programación, probablemente le dará conocimiento, pero no va a cambiar su vida, o su experiencia global real como un programador de 24 horas, días o incluso semanas. ¿Qué tal trabajar duro para mejorar continuamente más de 24 meses? Bueno, ahora vas a empezar a llegar a alguna parte.

Receta para ser un Programador exitoso:

  • Obtener interesado en la programación, y hacer algo de porque es divertido. 
  • El mejor tipo de aprendizaje es aprender haciendo . Para decirlo más técnicamente, "el máximo nivel de rendimiento de los individuos en un determinado dominio no se alcanza automáticamente en función de la experiencia extensa, pero el nivel de rendimiento puede incrementarse incluso en individuos altamente experimentados como resultado de esfuerzos deliberados para mejorar . " 
  • Habla con otros programadores, leer otros programas. Esto es más importante que cualquier libro o curso de formación. Entender un programa escrito por otra persona. Vea lo que se necesita para entender y arreglarlo cuando los programadores originales no están presentes.
  • Trabaja en proyectos con otros programadores. Sé el mejor programador en algunos proyectos, la peor en otros. Cuando eres el mejor, tienes que poner a prueba tus habilidades para liderar un proyecto, y para inspirar a otros con su visión. Cuando eres el peor, aprendes lo que los maestros hacen, y aprendes lo que no les gusta hacer.
  • Aprender por lo menos una media docena de lenguajes de programación como Java, C++, Lisp o ML, Prolog, Icon, Scheme, Sisal, entre otros.

"La educación en computación no puede hacer a nadie un experto programador más que estudiar pinceles y pigmentos puede hacer a alguien un pintor experto" Eric Raymond

Ver más en Aprende a programar en diez años

Matt Mills: Reconocimiento de imágenes que lleva a realidad aumentada


Matt Mills y Tamara Roukaerts demuestran Aurasma, una nueva herramienta de realidad aumentada que perfectamente puede animar el mundo visto a través de un teléfono inteligente. Más allá de la realidad aumentada anterior, su "aura" puede hacer todo, desde hacer una charla de pintura o para superponer noticias en vivo sobre un periódico impreso.

Ramesh Raskar: Captura de un billón de imágenes por segundo


En 1964  Doc Edgerton  comenzó a utilizar luces estroboscópicas para crear fotografías extraordinarias, fue capaz de fotografiar cosas como gotas de leche cayendo dentro de un plato y balas que se desplazaban a velocidades de una
millonésima de segundo.
Cincuenta años más tarde gracias a un nuevo tipo de fotografía, la “Femtografía” desarrollado por el grupo del MIT Media Lab de la cámara Cultura en colaboración con Bawendi Laboratorio en el Departamento de Química en el MIT, podemos ver el mundo a un trillón de cuadros por segundo, técnica tan rápida que puede crear video en cámara lenta de la luz en movimiento.

Esta tecnología algún día podría usarse para construir cámaras que puedan ver tras los rincones o el interior del cuerpo sin rayos X y una gran cantidad de aplicaciones comerciales.

domingo, 19 de agosto de 2012

Corrección Gamma






La corrección gamma es una forma especial de aumento de contraste diseñada para mejorar el contraste en áreas muy claras o muy oscuras. Esto se logra modificando los valores medios, particularmente los medios-bajos, sin afectar el blanco (255) ni el negro (0). Puede utilizarse para mejorar el aspecto de una imagen, o para compensar el rendimiento de diferentes dispositivos frente a una imagen.




La forma de realizar esta corrección está dada por:


El siguiente es un ejemplo de diferentes correcciones gamma aplicadas a una imagen:
 

Brillo y Contraste

Brillo

El brillo es un término usado para describir la cantidad total de luz en una imagen. Este control afecta toda la imagen y puede aplicarse sobre la luminosidad (intensidad combinada de los tres colores RGB) o sobre un color en particular. Cuando se incrementa el brillo, el valor de cada píxel se acerca más a 255 (blanco). Cuando se disminuye, el valor de cada píxel se reduce más cerca del 0 (negro)
023466992115138 161 184 207 255

Este es un ejemplo de la variación de brillo en una imagen:



Contraste


El contraste es un término usado para denotar el grado de diferencia entre los componentes más oscuros y los más claros en una imagen.

Un ejemplo simple es el contraste entre un objeto de brillo constante sobre un fondo de un brillo constante. Si ambas superficies tienen el mismo brillo, el contraste será nulo, y el objeto tanto física como perceptiblemente será indistinguible del fondo. Según se incrementa la diferencia en brillo el objeto será perceptiblemente distinguible del fondo una vez alcanzado el umbral de contraste, que se sitúa alrededor del 0,3% de diferencia.

 
Este es un ejemplo de la variación en contraste de una imagen:
 
 
 
Ver más en...

jueves, 19 de julio de 2012

El formato BMP


El formato BMP es uno de los más simples. Fue desarrollado por Microsoft e IBM en forma conjunta.
Un archivo BMP es un archivo de mapa de bits, es decir, un archivo de imagen de gráficos, con píxeles almacenados en forma de tabla de puntos que administra los colores como colores reales o usando una paleta indexada. 

Normalmente, se caracterizan por ser muy poco eficientes en su uso de espacio en disco, pero pueden mostrar un buen nivel de calidad. Puede guardar imágenes de 24 bits (16,7 millones de colores), 8 bits (256 colores) y menos. Puede darse a estos archivos una compresión sin pérdida de calidad: la compresión RLE (Run-length encoding).

Dependiendo de la profundidad de color que tenga la imagen cada píxel puede ocupar 1 o varios bytes. Generalmente se suelen transformar en otros formatos, como JPEG (fotografías), GIF o PNG (dibujos y esquemas), los cuales utilizan otros algoritmos para conseguir una mayor compresión.


La estructura de un mapa de bits es la siguiente:


1. El encabezado del archivo


El encabezado del archivo proporciona información acerca del tipo de archivo (mapa de bits) y su tamaño, así como también indica dónde comienza realmente la información de la imagen.
El encabezado comprende cuatro campos:
  • La firma (en 2 bytes), que indica que se trata de un archivo BMP con dos caracteres
    • BM424D en hexadecimal, que indica que se trata de un mapa de bits de Windows
    • BA que indica que se trata de un mapa de bits OS/2
    • CI que indica que se trata de un icono de color de OS/2
    • CP indica que es un puntero de color de OS/2
    • IC indica que es un icono de OS/2
    • PT indica que es un puntero de OS/2
  • El tamaño total del archivo en bytes (codificado en 4 bytes)
  • Un campo reservado (en 4 bytes)
  • El desajuste de la imagen (en 4 bytes), es decir, la ubicación del comienzo de la información de la imagen en relación con el comienzo del archivo

2. Encabezado de información del mapa de bits

El encabezado de información del mapa de bits proporciona información acerca de la imagen, en especial las dimensiones y los colores.
La información del mapa de bits comprende cuatro campos:
  • El tamaño del encabezado de información del mapa de bits en bytes (codificado en 4 bytes). Los siguientes valores hexadecimales son posibles según el tipo de formato BMP:
    • 28 para Windows 3.1x, 95, NT
    • 0C para OS/2 1.x
    • F0 para OS/2 2.x
  • El ancho de la imagen (en 4 bytes), es decir, el número de píxeles contados de forma horizontal
  • La altura de la imagen (en 4 bytes), es decir, el número de píxeles contados de forma vertical
  • El número de planos (en 2 bytes). Este valor es siempre 1
  • La profundidad del modelo de color (en 2 bytes), es decir, el número de bits usados para codificar el color. Este valor puede ser equivalente a 1, 4, 8, 16, 24 ó 32
  • El método de compresión (en 4 bytes). Este valor es 0 cuando la imagen no está comprimida o 1, 2 ó 3 según el tipo de compresión usado:
    • 1 para la codificación RLE de 8 bits por píxel
    • 2 para la codificación RLE de 4 bits por píxel
    • 3 para la codificación de campo de bits, lo que significa que el color fue codificado por una máscara triple representada por la paleta
  • El tamaño total de la imagen en bytes (en 4 bytes).
  • La resolución horizontal (en 4 bytes), es decir, el número de píxeles por metro contado de forma horizontal
  • La resolución vertical (en 4 bytes), es decir, el número de píxeles por metro contado de forma vertical
  • El número de colores de la paleta (en 4 bytes)
  • El número de colores importantes de la paleta (en 4 bytes). Este campo puede equivaler a 0 cuando todos los colores son importantes.

3. Paleta de imágenes

La paleta es opcional. Cuando se define la paleta, ésta contiene 4 bytes de forma sucesiva para cada una de las entradas, que representan:
  • El componente azul (en un byte)
  • El componente verde (en un byte)
  • El componente rojo (en un byte)
  • Un campo reservado (en un byte)

4. Codificación de imágenes

La codificación de imágenes se realiza escribiendo en forma sucesiva los bits que corresponden a cada píxel, línea por línea, comenzando por el píxel del extremo inferior izquierdo.
  • Las imágenes de 2 colores usan 1 bit por píxel, lo que significa que un byte permite codificar 8 píxeles
  • Las imágenes de 16 colores usan 4 bits por píxel, lo que significa que un byte permite codificar 2 píxeles
  • Las imágenes de 256 colores usan 8 bits por píxel, lo que significa que se necesita un byte para codificar cada píxel
  • Las imágenes de colores reales usan 24 bits por píxel, lo que significa que se necesitan 3 bytes para codificar cada píxel, respetando la alternancia del orden de los colores para el azul, el verde y el rojo.
Cada línea de la imagen debe comprender un número total de bytes que sea múltiplo de 4; si este esquema no se cumple, la línea se debe completar con todos los 0 necesarios para respetar el criterio. 


Ver más en...
http://es.kioskea.net/contents/video/format-bmp.php3
http://es.wikipedia.org/wiki/Windows_bitmap
http://www.digitalfotored.com/imagendigital/bmp.htm

WINDOSiLL


Aprendiendo como utilizar blogger ;)