fotografías/imágenes
En este artículo, veremos la mejora del contraste mediante la ecualización de histogramas. La ecualización del histograma es una técnica matemática para ampliar el rango dinámico del histograma. A veces, el histograma se extiende sobre un rango corto.
Pasos:
- Encuentre la frecuencia de cada valor representado en el eje horizontal del histograma, es decir, la intensidad en el caso de una imagen.
- Calcule la función de densidad de probabilidad para cada valor de intensidad.
- Después de encontrar el PDF, calcule la función de densidad acumulada para la frecuencia de cada intensidad.
- El valor de CDF está en el rango de 0-1, por lo que multiplicamos todos los valores de CDF por el mayor valor de intensidad, es decir, 255.
- Redondee los valores finales a valores enteros.
Función utilizada:
- imread() es una función incorporada que se usa para leer la imagen.
- size( ) es una función incorporada que se utiliza para obtener el tamaño de la imagen.
- rgb2gray( ) es una función integrada que se utiliza para convertir una imagen RGB en una imagen en escala de grises.
- zeros(row, col) es una función incorporada que se utiliza para crear una array de ceros fila*columna.
- unit8( ) es una función integrada que se utiliza para convertir valores dobles en formato entero.
- imshow() es una función incorporada que se usa para mostrar imágenes.
- title( ) es una función incorporada que se utiliza para adjuntar un título a la imagen.
- pause() es una función incorporada que se usa para pausar el sistema para ejecutar las siguientes declaraciones.
Ejemplo:
Matlab
% MATLAB code for Histogram equalisation % function to return resultant % image: Apply on single channel only. function new_img=myhisteq(img) Freq=zeros(1,256); [x,y,z]=size(img); % Convert into grayscale if % image is coloured. if(z==3) img=rgb2gray(img); end % Calculate frequency of each % intensity value. for i=1:x for j=1:y Freq(img(i,j)+1)=Freq(img(i,j)+1)+1; end end % Calculate PDF for each intensity value. PDF=zeros(1,256); Total=x*y; for i=1:256 PDF(i)=Freq(i)/Total; end % Calculate the CDF for each intensity value. CDF=zeros(1,256); CDF(1)=PDF(1); for i=2:256 CDF(i)=CDF(i-1)+PDF(i); end % Multiply by Maximum intensity value % and round off the result. Result=zeros(1,256); for i=1:256 Result(i)=uint8(CDF(i)*(255)); end % Compute the new image. mat=zeros(size(img)); for i=1:x for j=1:y mat(i,j)=Result(img(i,j)+1); end end new_img=mat; imshow(img, []); caption = sprintf("Original input Image"); title(caption, 'FontSize', 14); drawnow; pause(5); imshow(new_img, []); caption = sprintf("Original output Image"); title(caption, 'FontSize', 14); drawnow; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Utility Code k=imread("poor_contrast_image.png"); myhisteq(k);
Producción:
a Este método aplica la ecualización de histograma globalmente. También podemos aplicar este método en pequeños bloques de la imagen para mejorar el contraste. Esa técnica se llama ecualización de histograma adaptativo. AHE es más eficiente que HE simple.
Publicación traducida automáticamente
Artículo escrito por pintusaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA