Применение симплекс-метода
Автор
using Statistics
function rangfilt(Initial_Img, T, step=1)
# Initial_Img - исходное изображение;
# T – выходной вектор-столбец пороговых коэффициентов
# step - шаг смещения фильтра, по умолчанию step = 1
# Img - изображение после фильтрации
# Исходные данные
if size(T, 2) > 1
T = T'
end
Initial_Img = Float64.(Initial_Img)
i_len, j_len = size(Initial_Img)
S = length(T) * 2 + 1
# Вычисляем количество строк в Img
num_rows = length(1:step:i_len-S)
Img = zeros(num_rows, j_len)
# Алгоритм ранговой обработки
for j in 1:j_len
i_n = 1
for i in 1:step:i_len-S
X = Initial_Img[i:i+S-1, j]
n = (S + 1) ÷ 2
Xn = X[n]
X = vcat(X[1:n-1], X[n+1:end])
X = sort(X)
m = median(X)
D = zeros(4)
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 += 1
end
end
return Img
end