Функции, которые вычисляют маску фильтра размера NXN и применяют ее к входному изображению, используя функцию conv2 () в Matlab - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь написать функцию для создания маски фильтра размера NXN, а затем применить ее к считанному изображению. Вот моя попытка ...

function Iout = noiseReduction(I, N)
image = imread(I);
figure(3)
subplot(2,1,1), imshow(image), title('Original Image', 'FontSize', 15);

mask = ones(3,3) * N;
Iout = conv2(image, mask);
subplot(2,1,2), imshow(uint8(Iout)), title('Blurred Image', 'FontSize', 15);

end

Однако, когда я запускаю функция Я не получаю никакого вывода в Blurred Image Я просто получаю пустой квадрат. Может кто-нибудь помочь мне понять, что с этим не так? Любая помощь будет фантастической c.

1 Ответ

1 голос
/ 20 февраля 2020
mask = ones(3,3) * N;

Это не фильтр NxN, а фильтр 3x3, где каждый элемент имеет значение N.

. Свернув такой фильтр, вы получите изображение с очень большими значениями. Позже вы приводите это к uint8, ограничивая все значения 255. Следовательно, изображение выглядит полностью белым.

Вместо этого определите ваше ядро ​​как:

mask = ones(N,N) / N^2;

Теперь mask - это NxN и суммы до 1, означая, что выход останется в том же диапазоне, что и вход.

...