Ecualización adaptativa de histogramas en el procesamiento de imágenes mediante MATLAB

La ecualización del histograma es una técnica matemática para ampliar el rango dinámico del histograma. A veces, el histograma se expande en un rango corto, por ecualización se amplía el rango del histograma. En el procesamiento de imágenes digitales, el contraste de una imagen se mejora utilizando esta misma técnica. 

Ecualización de histograma adaptable: La ecualización de histograma adaptable es una técnica de procesamiento de imágenes digitales que se utiliza para mejorar el contraste de las imágenes. Se diferencia de la ecualización de histograma normal en que el método adaptativo mejora el contraste localmente. Divide la imagen en bloques distintos y calcula la ecualización del histograma para cada sección. Por lo tanto, AHE calcula muchos histogramas, cada uno de los cuales corresponde a una sección distinta de la imagen. Mejora el contraste local y las definiciones de los bordes en todas las regiones distintas de la imagen.

ventajas:

  • Calcula el HE de distintas secciones de la imagen.
  • Conserva los bordes en distintas regiones de la imagen.
  • Realza el contraste localmente.

Desventaja: 

AHE sobreamplifica el ruido en regiones relativamente homogéneas de una imagen. Para evitar esto, se utiliza una variante de ecualización de histograma adaptativa llamada ecualización de histograma adaptativa limitada por contraste (CLAHE).

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.
  • blockproc() es una función incorporada que se usa para aplicar la función HE a distintas secciones de la imagen.
  • length() es una función incorporada que se usa para encontrar el tamaño de la lista.
  • imtool() es una función incorporada que se utiliza para mostrar imágenes.
  • pause() es una función incorporada que se usa para pausar el sistema para ejecutar las siguientes declaraciones.

Matlab

% MATLAB code for Histogram equalisation
% function to return resultant
% image: Apply on single channel only.
function res_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.
new_img=zeros(size(img));
for i=1:x
    for j=1:y
        new_img(i,j)=Result(img(i,j)+1);
    end
end
res_img=new_img;
end
  
%%%%% UTILITY CODE %%%%%%%%
fun=@(block_struct)myhisteq(block_struct.data);
  
%blockproc() is block processing function.
%it applies normal HE on distinct block of
%defines sizes [m n]
  
list=["hat_lady.jfif"];
for i=1:length(list)
    img=imread(list(i));
    AHEq=blockproc(img,[100 100], fun);
    %AHEq=blockproc(img,[200 200], fun);
    %AHEq=blockproc(img,[250 200], fun);
    %HEq=myhisteq(img);
    %imtool(HEq,[]);
    imtool(AHEq,[]);
    imtool(img,[]);
    pause(10);
    imtool close all;

Producción:

 

AHE es mejor que HE ordinario cuando la imagen tiene puntos extremadamente oscuros o brillantes. Pero AHE tiende a sobreamplificar el contraste en regiones casi constantes de la imagen ya que el histograma en dichas regiones está muy concentrado. Como resultado, AHE puede hacer que el ruido se amplifique en la región casi constante.

 

Publicación traducida automáticamente

Artículo escrito por pintusaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *