Удаление шума из изображения RGB MATLAB - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь удалить шум из уже зашумленного RGB-изображения. Я видел несколько примеров, когда шум соли и перца добавляется к чистому изображению, а затем снова удаляется в качестве примера, но я читаю на уже зашумленном изображении, если это имеет смысл. Этот код по какой-то причине не вносит никаких изменений в исходное изображение. Шум не был удален вообще. Любая помощь будет оценена.

train.jpg

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]);

% Find the noise in the red.
noiseImage = (redChannel == 0 | redChannel == 255);
% Get rid of the noise in the red by replacing with median.
noiseFreeRed = redChannel;
noiseFreeRed(noiseImage) = redMF(noiseImage);
% Find the noise in the green.
noiseImage = (greenChannel == 0 | greenChannel == 255);
% Get rid of the noise in the green by replacing with median.
noiseFreeGreen = greenChannel;
noiseFreeGreen(noiseImage) = greenMF(noiseImage);
% Find the noise in the blue.
noiseImage = (blueChannel == 0 | blueChannel == 255);
% Get rid of the noise in the blue by replacing with median.
noiseFreeBlue = blueChannel;
noiseFreeBlue(noiseImage) = blueMF(noiseImage);
% Reconstruct the noise free RGB image
rgbFixed = cat(3, noiseFreeRed, noiseFreeGreen, noiseFreeBlue);

figure, imshow(rgbFixed);

1 Ответ

0 голосов
/ 08 января 2019

Как прокомментировал Андер Бигури , существует много способов уменьшения шума на изображении. Перечисление их всех здесь выходит за рамки переполнения стека. Но я предложу один способ: медианная фильтрация. Я предлагаю это, потому что вы уже делаете это!

Вы применяете 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);

Поскольку ваше изображение очень шумное, возможно, вы захотите увеличить размер фильтра. Но вы будете идти на компромисс между шумом и размытостью.

...