Как показано в этой работе ( код ), следующий код может улучшить изображение (т. Е. Карту серой шкалы).
УточнениеФункция:
function sal = Refinement(y, dim)
th_2 = graythresh(y);
if dim == 1
sal = y;
sal(y<th_2) = 10*(y(y < th_2))/th_2 - 10;
sal(y>=th_2) = 10*(y(y >= th_2) - th_2)/(1-th_2);
sal = 1 ./ (1 + exp(-sal)) + y;
sal = normalization(sal, 0);
elseif dim == 2
[r, c] = size(y);
y_col = reshape(y,[1 r*c]);
sal_col = y_col;
sal_col(y_col<th_2) = 10*(y_col(y_col < th_2))/th_2 - 10;
sal_col(y_col>=th_2) = 10*(y_col(y_col >= th_2) - th_2)/(1-th_2);
sal_col = 1 ./ (1 + exp(-sal_col)) + y_col;
sal = reshape(sal_col, [r c]);
end
end
функция нормализации:
function matrix = normalization(mat, flag)
% INPUT :
% flag: 1 denotes that the mat is a 3-d matrix;
% 0 denotes that the mat is a matrix;
%
if flag ~= 0
dim = size(mat,3);
matrix = mat;
for i = 1:dim
matrix(:,:,i) = ( mat(:,:,i) - min(min(mat(:,:,i)))) / ( max(max(mat(:,:,i))) - min(min( mat(:,:,i))) + eps);
end
else
matrix = ( mat - min(min(mat)))/( max(max(mat)) - min(min(mat)) + eps);
end
Однако после применения функции значения матрицы изображения будут изменены, результат останетсятак же, как изображение до уточнения.
Есть ли концептуальная ошибка с этим или реализация не удалась?
PS Входное изображение (карта достоверности) для нефтеперерабатывающего завода выглядит примерно так, как показано ниже. на уточненной карте значимости передний план (сатрафиш на этом изображении) должен выделяться (становится по возможности однородно белым), а фоновый шум должен быть удален (по возможности становится однородно черным):