Búscalo aquí:

Obtener el Histograma de una imagen en Matlab [código]

Para realizar el procesamiento digital de imágenes, una de las tareas básicas y de mucha utilidad para otras, es obtener y visualizar el histograma de una imagen a procesar. Matlab, en su toolbox, ofrece comandos que permiten visualizar este histograma, sin embargo, nosotros mismos podemos usar nuestro popio código para este fin.

A continuación el código para obtener el histograma de una imagen en escala de grises:

  1. function hist=Histograma (imagen)
  2. im = imread(imagen);
  3. imD = double(im);
  4. [f,c]=size(imD);
  5. for i=1:256
  6. h(i) = 0;
  7. end
  8. for i=1:f
  9. for j=1:c
  10. k = imD(i,j);
  11. h(k+1) = h(k+1)+1;
  12. end
  13. end
  14. plot(h);
  15. hist = h;



La entrada es una cadena de caracteres conteniendo la ruta de la imagen que deseamos procesar. por ejemplo, 'D:\proc\lena.tif', obteniendose el vector que contiene el histograma de dicha imagen y visualizándose mediante el comando plot. Luego tan solo queda hacer uso de la función de la siguiente manera: H=Histograma('D:\proc\lena.tif'); parara obtener nuestro propio histograma. En las siguientes imagenes, la famosa lena y el histograma resultante mediante el código presentado.



Si se desea obtener el histograma de una imagen en espacio de colores RGB, entonces lo único que se tendría que agregar al código presentado es la obtención de un histograma por cada matriz componente R, G, B de la imagen.


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



35 comentarios:

  1. si hablas de matlab imhist(I) ;) mucho mas rapido en tiempo y es solo un comando, claro en matlab.

    ResponderEliminar
  2. Si desean saber como normalizar el histograma pueden ver: normalización de un histograma.

    saludos

    ResponderEliminar
  3. Hola.

    Recomiendo inicializar el vector "h" evitando el bucle for en Matlab. Para el caso, mejor usar:

    h=zeros(1,256);

    Saludos.

    ResponderEliminar
  4. Que tal,
    Tienes un problema en el conteo de tus datos, pues que pasa si tienes un valor de 0 en el RGB, entonces k seria cero y te lanzaría un error pues Matlab no permite localidades con indice 0 en sus arreglos, entonces te recomendaría que cambiaras las siguientes lineas.

    h(k + 1) = h(k + 1) + 1;

    Saludos

    ResponderEliminar
  5. Buen aporte, gracias por el comentario,

    saludos

    ResponderEliminar
    Respuestas
    1. no me funcionaa help me please

      Eliminar
  6. Gracias por el aporte me sirvió mucho :3

    ResponderEliminar
  7. genialllll....me salvaste d euna pequeña prueba...saludos !!!!

    ResponderEliminar
  8. excelente aporte pero como seri si quiero obtener el histograma por cada color

    ResponderEliminar
  9. hola disculpa una pregunta como podria hacer un ciclo para que me leyera una imagen por partes de 5 por 5 pixeles, para toda la imagen y que me saque el histograma de cada parte lo estoy haciendo con este codigo:

    for i=1:256
    h(i) = 0;
    end
    for i=1:5
    for j=1:5
    k = im(i,j);
    h(k) = h(k)+1;
    end
    end

    mas o menos pero como le puedo hacer para que me los vaya incementando o sea que pase a los siguientes 5 pixeles les agradeceria cualquier aporte gracias...

    ResponderEliminar
    Respuestas
    1. Hola, en tu caso, lo que haria seria colocar, despúes del for de la linea 11, un par más de for a=1:5 y b=1:5, y dentro de eso aplicaría lo que sigue (que es lo que entiendo que estas solicitando).

      saludos

      Eliminar
    2. hola disculpa eso si lo hace lo que no hace es recorrer la matriz en submatrices de 5*5 pixeles ciando quiero que los recorra le sumo 5 y se lo suma al valor del pixel no recorre otras 5 posiciones no se que tengo mal no se como hacer el ciclo para que los recorra toda la imagen pero por partes no se si me entiendas y gracia valla que eres bueno para esto muchas gracias por todo

      Eliminar
    3. le puse el ciclo de esta manera
      if cuadro < size (im)
      for i<f
      a=i + 5
      for j<c
      b= j + 5
      end

      tratanndo de que cuando sea menor a el tamaño de la imagen incrementara solo que lea la imagen toda pero por partes...llevo horas y no se como hacerle se qu lleva un ciclo for pero no le puedo poner "menor a", porque me marca error??

      en cuadro tengo (im(1:5,1:5)) y si me saca el cuadro tengo la idea pero no le estoy estructurando bien

      Eliminar
  10. y parar cualquiel imagen como seria e codigo

    ResponderEliminar
    Respuestas
    1. a qué te refieres con para cualquier imagen? ...si te refieres a una imagen en espacio RGB, lo que normalmente se hace es crear un histograma para cada matriz R, G y B

      saludos

      Eliminar
  11. como puedo hacer que la grafica que obtengo de un histograma normalizado, sea suavizado la grafica y como debe de ser el codigo.

    ResponderEliminar
    Respuestas
    1. con suavizado te refieres a los bordes de la curva del histograma? si es asi entonces ya tendrías que entrar en detalles de los parámetros de la función plot que te ofrece Matlab,

      saludos

      Eliminar
    2. Jorge, tengo una pregunta... tengo ciertas imágenes en una carpeta y lo que quiero hacer es coger la primera imagen y compararla con la segunda, luego la segunda con la tercera y así sucesivamente... se que debo hacer un ciclo, pero como lo hago??
      Cada vez que comparo las imágenes hago unos cálculos.

      Eliminar
    3. Hola Sebastian, en esos casos lo que hago es renombrar las imagenes a analizar con nombres numéricos (1.bmp, 2.bmp, etc ), luego hacer una lectura iterativa en un bucle y hacer el procesamiento respectivo

      sds

      Eliminar
  12. hola! espero me puedas ayudar...
    como puedo hacer para contar la ocurrencia de tonalidades de gris en una imagen en blanco y negro?!

    gracias de antemano

    saludos ;D

    ResponderEliminar
    Respuestas
    1. Hola, si entendí bien tu pregunta, lo que estas buscando es justamente el código de un histograma, como el que se muestra en este post.

      sds

      Eliminar
  13. Hola una pregunta como podría hacer el histograma para RGB, me ayudarían mucho si me podrías mostrar como es el programa en matlab

    ResponderEliminar
    Respuestas
    1. Hola, el histograma para RGB sería este mismo código pero usado 3 veces, 1 para cada matriz R, G y B

      sds

      Eliminar
  14. Hola como estas te quiero pedir un favor por favor necesito escribir un programa en matlab para modificar un color dominante de una imagen y reemplazarlo por otro Sera que me puedes ayudar? Gracias de antemano

    ResponderEliminar
    Respuestas
    1. Tendrías que identificar el "color dominante" que asumo que sea, por ejemplo, un color que tenga un valor alto de ocurrencia. Una vez eso, solo sería asignarle un nuevo valor a todos los píxeles que tengan dicho valor.

      sds

      Eliminar
  15. Podrias escribir el codigo ya completo

    ResponderEliminar
    Respuestas
    1. El código está completo, o a que te refieres especificamente?

      Eliminar
  16. disculpa, hay términos de los cuales no es entendible a que se refieren, al correrlo en matlab marca errores y no se como corregirlo xq no entiendo algunos términos... podrías ayudarme????

    ResponderEliminar
  17. Hola, como puedo representar 4 histogramas en una sóla figura con la función plot.
    Gracias

    ResponderEliminar
  18. se podria seguir agregando codigo al que tu hiciste, para mostrar la mayor canticad de color claro
    una especie de sal y pimienta?, en que parte del codigo lo puedo agregar?

    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...