Skip to content

Instantly share code, notes, and snippets.

@nelsondspy
Created June 1, 2015 00:21
Show Gist options
  • Save nelsondspy/fd1784a4918c6fab13d2 to your computer and use it in GitHub Desktop.
Save nelsondspy/fd1784a4918c6fab13d2 to your computer and use it in GitHub Desktop.
function Gf = multiescalemorph( g, B , M)
%MULTISCALEMORPH Implementacion de mejora del contraste utilizando un
% enfoque morfologico
% Parametros :
% g: imagen de entrada,
% B: elemento estructurante convexo
% M: cantidad de veces que se escalara el elemento estructurante
% Presentado por Susanta Mukhopadhyay, Bhabatosh Chanda en ,
% "A multiscale morphological approach to local contrast enhancement"
% (1999)
% Implementado por : Nelson Durañona Ariel Méndez
% Definimos las funciones en funciones a erosiones y dilataciones
%Sa : almacena las sumatoria de las transformaciones con detalles brillantes
%Sb : almacena las sumatoria de las transformaciones con detalles opacos
Sa = 0*g;
Sc = Sa;
for n=1:M
nB = ndilate(n , B);
%basicamente es una transformacion top-hat con B escalado
FaB = g - apertura(g, nB);
%basicamente es una transformacion bottom-hat con B escalado
FcB = cierre(g, nB) - g ;
Sa = Sa + FaB ;
Sc = Sc + FcB ;
end
%finalmente se asigna el mismo peso para cada sumatoria y se suma a la
%imagen original.
Gf = g + (0.5* Sa) - (0.5* Sc) ;
end
function a= apertura(g, B)
a = imdilate(imerode(g,B),B);
end
function c= cierre(g, B)
c = imerode(imdilate(g,B),B);
end
function Br = ndilate(n, B)
%B: elemento estructurante
Br = B.getnhood();
for i = 1:n-1
%expande la matriz del EE para permitir la dilatacion
[F, C ] = size(Br);
Br = imdilate(Br,B);
end
end
%Set de pruebas con varias imagenes
function test1()
f = imread('brain.tif');
f= f(:,:,1);
%metodo propùesto implementado
B= strel('disk',6);
G = multiescalemorph(f, B , 6);
figure ;imshow(G);
%ecualizacion de histograma global
h = histeq(f);
figure ;imshow(h);
%
h2 = imadjust(f);
figure ;imshow(h2);
%comparacion de metricas
%entropia
fprintf( '\nEntropia segun metodo prop %d:' , entropy(G ));
fprintf( '\nEntropia segun ecualizacion %d:\n' , entropy(h));
fprintf( '\nEntropia segun ecualizacion por regiones %d:\n' , entropy(h2));
end
function test2()
f = imread('m1.jpg');
f= f(:,:,1);
%metodo propùesto implementado
B= strel('disk',2);
G = multiescalemorph(f, B , 4);
figure ;imshow(G);
%ecualizacion de histograma global
h = histeq(f);
figure ;imshow(h);
%
h2 = imadjust(f);
figure ;imshow(h2);
%comparacion de metricas
end
function test3()
f = imread('m2.jpg');
f= f(:,:,1);
%metodo propùesto implementado
B= strel('disk',5);
G = multiescalemorph(f, B , 6);
figure ;imshow(G);
%ecualizacion de histograma global
h = histeq(f);
figure ;imshow(h);
%
h2 = imadjust(f);
figure ;imshow(h2);
%
%psnr
%contraste
%distorsion ( cantidad de ruido que agrega )
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment