Применение симплекс-метода
Author
function Img = rangfilt( Initial_Img, T, step )
% Initial_Img - исходное изображение;
% T – выходной вектор-столбец пороговых коэффициентов
% step - шаг смещения фильтра, по умолчанию step = 1
% Img - изображение после фильтрации
%% Исходные данные
if size( T, 2 ) > 1, T = T'; end
if nargin < 3 || isempty( step ), step = 1; end
Initial_Img = double( Initial_Img );
[ i_len, j_len ] = size( Initial_Img );
S = length( T ) * 2 + 1;
Img = zeros( 1, j_len );
%% Алгоритм ранговой обработки
for j = 1 : j_len
i_n = 1;
for i = 1 : step : i_len - S
X = Initial_Img( i : i + S - 1, j );
n = ( S + 1 ) / 2;
Xn = X( n );
X = [ X( 1 : n - 1 ); X( n + 1 : S ) ];
X = sort( X, 'ascend' );
m = double( median( X ));
D = zeros(4,1);
if Xn <= m
D = X( 1 : n - 1 ) - Xn;
else
D = Xn - X( n : end );
end
% Пиксель считается импульсом, если выполняется условие:
if sum( D - T > 0 ) >= 1
Xn = m;
end
Img( i_n, j ) = Xn;
i_n = i_n + 1;
end
end