Как прокомментировал Андер Бигури , существует много способов уменьшения шума на изображении. Перечисление их всех здесь выходит за рамки переполнения стека. Но я предложу один способ: медианная фильтрация. Я предлагаю это, потому что вы уже делаете это!
Вы применяете medfilt2
к каждому каналу входного изображения. Просто пропустите все, что следует после, и оставьте только самую последнюю строку: соединение каналов обратно в изображение RGB.
p = imread("train.jpg");
redChannel = p(:, :, 1);
greenChannel = p(:, :, 2);
blueChannel = p(:, :, 3);
% Median Filter the channels:
redMF = medfilt2(redChannel, [3 3]);
greenMF = medfilt2(greenChannel, [3 3]);
blueMF = medfilt2(blueChannel, [3 3]);
rgbFixed = cat(3, redMF, greenMF, blueMF)
figure, imshow(rgbFixed);
Поскольку ваше изображение очень шумное, возможно, вы захотите увеличить размер фильтра. Но вы будете идти на компромисс между шумом и размытостью.