Búscalo aquí:

Binarización de Imágenes [código]

La binarización de imágenes es una tarea básica en muchas aplicaciones de procesamiento digital de imágenes. El objetivo es obtener una imágen que solo sea representada por dos tonos de color, por general: blanco y negro. La idea para realizar este trabajo es sencilla, solo debemos decidir que tono de color dar a cada píxel que sea mayor que un determinado umbral (valor límite), el resto de píxeles tendrán por defecto el otro tono de color.

En la imagen se muestra la tradicional fotografía de Lena binarizada, usando un valor de umbral = 120. La imagen original se encontraba en escala de grises, y todos los píxeles superiores a 120 tomaron tono blanco, los demas, tomaron el tono negro.

El código fuente en matlab de la función binarizar es el siguiente:
  1. %author: jorge Valverde
  2. function y = Binarizacion(imagen,umbral)
  3. im=imread(imagen);
  4. imD=double(im);
  5. [f,c]=size(imD);
  6. for i=1:f
  7. for j=1:c
  8. if imD(i,j)<=umbral
  9. nuevaI(i,j) = 0;
  10. else
  11. nuevaI(i,j) = 255;
  12. end
  13. end
  14. end
  15. imB = uint8(nuevaI);
  16. imshow(imB);
  17. y = nuevaI;

Espero les sea de utilidad, saludos.




Quieres leer más post como éste???...suscribete aquí!!!


24 comentarios:

  1. edt5=handles.img;
    gris=rgb2gray(edt5);
    umbral=graythresh(gris);
    bw=im2bw(gris,umbral);
    axes(handles.ejedest)
    imshow(bw)
    axis off

    yo lo estoy haciendo ejecutable desde un boton en el guide, que estoy haciendo mal q me sale error?.

    ResponderEliminar
  2. Hola soy ANA estudio diseño industrial y he intentado binarizar mediante el metodo de jorge pero en la imagen resultante aparecen tres imagenes binarizadas de la original que me puede estar pasando MUXAS GRACIAS

    ResponderEliminar
  3. Al parecer lo que estas enviando como parametro es una imagen RGB, la cual esta formada por 3 matrices de colores (matriz de Red, Green y Blue), es por eso que se realiza la binarizacion para cada matriz de componente de color y se obtiene el resultado que mencionas.

    Sin embargo, para lograr obtener una binarización como la que buscas, debes de enviar una imagen en escala de gris y asunto solucionado.

    Saludos

    ResponderEliminar
  4. el for se puede reemplazar por:

    nuevaI<umbral;

    ResponderEliminar
  5. Hola muchas gracias por tu blog es muy util ^^

    ResponderEliminar
  6. Hola que tal soy Rodro.

    Intenta meter la siguiente línea im=rgb2gray(im) entre la 5 y 6 del código del principio (ojo en cambiar los índices)
    Con esto podrán leer incluso una imagen en color y matlab lo cambiará a escala de grises!!

    Suerte.

    ResponderEliminar
  7. Hola, no estoy muy diestra en este tema, pero necesito calcular mediante una fotografia la distancia real que existe entre la camara digital y el objeto al cual le tomo la fotografia. Existe algun software libre que calcule esta distancia?, o me pueden facilitar el codigo fuente que realice esta operacion? Se lo voy a agradecer.

    ResponderEliminar
  8. Buenas tardes, soy algo nuevo en este tema sobre el manejo de imagenes, pero actualmente me encuentro en un proyecto de biometria, y se requeiere este proceso de binarizacion de la imagen, el codigo que explicaste me parece muy legible y simple, pero me podrias aclarar algo, a que te refieres con el parametro umbral. Muchas Gracias y disculpa las molestias.

    ResponderEliminar
  9. hola yo estoy haciendo mi tesis sobre digital video broadcasting DVB, lo que pasa es que no soy muy diestra en este tema y no me queda claro el codigo fuente estoy asignando la imagen que quiero binarizar pero obtengo un error en la linea donde se declara la funcion Y binarizacion(imagen , umbral) a que se refiere con umbral. De antemano gracias una disculpa.

    ResponderEliminar
  10. El umbral es un factor que sirve como filtro y determina hasta que valor pertenecen a un grupo (de color negro) o a otro (de color blanco), asi de sencillo

    ResponderEliminar
  11. yo ya he realizado la binarizacion en matlab y vhdl, ahora lo que necesito es una idea de como realizarlo en c++. Me pueden ayudar por favor.

    Muchar gracias

    ResponderEliminar
  12. Hola chicos yo stoy tratando de binarizar una imagen desde un slider en un gui de matlab y tengo el siguiente codigo:
    guidata(hObject, handles);

    mImage = handles.myImage;
    a=rgb2gray(mImage);
    slider_value = get(hObject,'Value');
    j=im2bw(a,slider_value);
    image(j, 'Parent', handles.axes2);

    Pero el problema es q me sale la imagen azul!!! q stoy haciendo mal???

    ResponderEliminar
  13. La función im2bw que utilizas sirve para convertir una imagen en escala de grises a una imagen binaria de acuerdo a un threshold, ten cuidado con el valor inicial de la variable Value, además al momento de visualizarla debes asegurarte que también se vea como una imagen de 1 solo canal (binaria o en escala de grises).

    saludos

    ResponderEliminar
  14. hola disculpa me marca errores e la linea 10 del codigo y no se porque

    ResponderEliminar
  15. hola que tal estoy haciendo un proyecto en el cual me piden que saque de una imagen una cadena binaria pero no estoy segura de como se puede hacer primero de una imagen saco una grafica con la funcion improfile despues necesito sacar la cadena binaria de la imagen pero no se como necesito ayuda y me urge porfavor.....gracias mi correo es aruasor_1998@hotmail.com lo que sea es bueno gracias

    ResponderEliminar
  16. Error en la linea 10? verifica que el valor del umbral sea el adecuado

    ResponderEliminar
  17. Si te piden una cadena binaria utiliza este mismo código, pero en vez de almacenar los resultados en una matriz hazlo directamente en un vector, ese vector tendrá la dimensión de f x c

    saludos

    ResponderEliminar
  18. como puedo guardar la imagen con un solo canal despues de binarizarla??

    ResponderEliminar
    Respuestas
    1. si trabajas en matlab simplemente despúes de usar la función uint8 guardas la matriz que has generado usando la función imwrite(imagen, path), donde imagen es la matriz de imagen generada y path es la ruta donde almacenará la imagen (incluyendo el nombre de la imagen con la extensión respectiva)

      saludos

      Eliminar
  19. Hola, tengo un tarea sobre hacerle un proceso a una imagen rgb: tengo que pasar la imagen rgb a una matriz binaria, luego esta matriz convertirla a vector, luego simular que la informacion pasa por un canal de comunicacion, luego recepcionar la imagen , convertirla de vector a matriz binaria y devolverla nuevamente a rgb y visualizarla. alguien me puede ayudar???... les dejo mi correo por favor: williams.arana.floriano@gmail.com

    ResponderEliminar
  20. hola, buenos dias, soy estudiante de ing sistemas,
    me colocaron un trabajo sobre hacer un analizador sintactico para validar unas preguntas, si esta estructurada de acuerdo a una gramatica, tienes mas material que me puedas facilitar o puedo guiarme por esto que publicaste.
    gracias, carmenrojas5626@hotmail.com

    ResponderEliminar
  21. hola como estas.....estoy realizando un proyecto de deteccion de objetos de una imagen pero no se como poder aislar los objetos que no quiero y quedarme con el que deseo ...... no se si me pueden guiarme.....gracias

    saludos.........

    ResponderEliminar
  22. hola como estas veo que esta es una muy buena de trabajar las imágenes, es una forma innovadora y es la primera veo tanto estilo. imagenes chistosasfb

    ResponderEliminar
  23. Buenas Tardes... estoy realizando la segmentación por umbralizacion con variación en los valores del umbral, pero necesito conocer la cantidad total de pixeles negros y blancos de cada imagen después de la segmentación implementada. Hasta el momento no he tenido éxito para lo cual agradecería algún comentario con el uso del FOR para dicho conteo.... Gracias

    ResponderEliminar

Bienvenido a jcGeorge's Blog!!!

Por favor deja tu comentario, consulta o sugerencia, procura mantener habilitado tu perfil de Blogger o deja un enlace a tu blog o web.

Gracias por leer este blog!!!

Related Posts Plugin for WordPress, Blogger...