Last active
April 1, 2016 22:55
-
-
Save nelsondspy/26b9ae4422d008bf7b74 to your computer and use it in GitHub Desktop.
pseudomediana para vecindad de 5 elementos en cruz. omisión de bordes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function imgresult = pseudo_mediana( img ) | |
%pseudo_mediana filtro pseudo mediana | |
%Autor Nelson Duranhona 20140911 YYYYMMDD | |
%Solo funciona para 5 elementos de vencidad | |
[ M ,N ] = size(img); | |
imgresult = uint8(zeros(M,N)); %imagen resultante | |
MSK.D_VERT = 1; % cant. de elem a tomar horizontalmente como vencidad | |
MSK.D_HOR = 1 ; % cant. de elem a tomar verticalmente como vencidad | |
%evita procesar los bordes | |
M = M - MSK.D_VERT; | |
N = N - MSK.D_HOR; | |
INI_F = 1 + MSK.D_VERT; | |
INI_C = 1 + MSK.D_HOR; | |
%Minimo y Maximo de tres elementos para evitar reservar mas vectores | |
%en O(M*N) al realizar el calculo principal | |
%Porque no sencillamente max([a,b,c]) o min[a,b,c]? | |
%[a,b,c] crea vectores de 3 elementos y en total se crearian 6 vec. solo | |
%para hallar maximos y minimos | |
MIN_3 = @(A,B,C) min(min(A,B),C); | |
MAX_3 = @(A,B,C) max(max(A,B),C); | |
for i = INI_F : M | |
for j = INI_C : N | |
%obtiene la vecindad con los parametros de la mascara | |
ve = imvencidad( img, [i , j], MSK.D_VERT , MSK.D_HOR ); | |
%Forma la cruz, cerando los puntos que no pertenecen a la cruz | |
ve(1,1)=0 ; ve(3,3)=0 ; ve(3,1)=0; ve(1,3)=0; | |
% reduce a una dimension y ordena los valores | |
ve_ord = sort(reshape( ve , 1, []) ); | |
%omite los 4 primeros elementos 0s ,dejando solo los de la cruz | |
a=ve_ord(5); b=ve_ord(6); c=ve_ord(7); d=ve_ord(8); e = ve_ord(9); | |
%aplica la definicion de pseudomediana , para 5 elementos | |
psmed =(1/2 * MAX_3( MIN_3(a,b,c), MIN_3(b,c,d), MIN_3(c,d,e) ))+... | |
(1/2 * MIN_3(MAX_3(a,b,c),MAX_3(b,c,d),MAX_3(c,d,e ))); | |
imgresult(i, j) = psmed ; | |
end | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment