MATLAB: примените фильтр нижних частот к изображению

Я пытаюсь реализовать простой фильтр нижних частот, используя функцию «единицы» в качестве фильтра и «conv2» для вычисления свертки обеих матриц (исходного изображения и фильтра), которое является отфильтрованным изображением, которое я хочу получить, но результатом imshow(filteredImage) является просто пустое белое изображение вместо отфильтрованного изображения.

Я проверил матрицу отфильтрованного изображения, это дубль 256x256, но я не знаю, почему оно не отображается должным образом.

I = imread('cameraman.tif');

filteredImage = conv2(double(I), double(ones(3,3)), 'same');

figure; subplot(1,2,1); imshow(filteredImage);title('filtered');
    subplot(1,2,2); imshow(I); title('original');

РЕДАКТИРОВАТЬ: я также попытался сначала преобразовать его в двойное перед вычислением свертки, поскольку она превышала 1, но это не дало эффекта фильтра нижних частот, но вместо этого увеличилась контрастность изображения.

I = imread('cameraman.tif');
I1 = im2double(I);
filteredImage = conv2(I1, ones(2,2), 'same');

figure; subplot(1,2,1); imshow(filteredImage);title('filtered');
    subplot(1,2,2); imshow(I1); title('original');

person Ouissal Benameur    schedule 27.12.2016    source источник
comment
Ожидается, что изображения типа double будут иметь значения от 0 до 1. Ваш filteredImage, вероятно, превышает это значение.   -  person beaker    schedule 28.12.2016
comment
@beaker Да, это было больше, но я сначала преобразовал его в двойной, используя im2double, но он слишком белый, а не размытый   -  person Ouissal Benameur    schedule 28.12.2016
comment
Итак, вы подошли ко второй проблеме. Каков диапазон значений в filteredImage? Готов поспорить, что в вашем отредактированном коде они находятся между 0 и 4.   -  person beaker    schedule 28.12.2016
comment
@beaker Да, они между 0 и 3   -  person Ouissal Benameur    schedule 28.12.2016
comment
Да извините, 0-4*   -  person Ouissal Benameur    schedule 28.12.2016
comment
А какой радиус действия, если использовать ядро ​​3х3?   -  person beaker    schedule 28.12.2016
comment
@beaker Между 0,2667 и 8,8196   -  person Ouissal Benameur    schedule 28.12.2016
comment
@beaker Я пытался нормализовать его с помощью mat2gray, но это не сработало   -  person Ouissal Benameur    schedule 28.12.2016
comment
Вместо этого попробуйте разделить ядро ​​на его размер: double(ones(3,3))/9.   -  person beaker    schedule 28.12.2016


Ответы (1)


Следующее решение устранило проблему с диапазоном, другие решения, которые были даны, касались определенного типа фильтров нижних частот, которые являются фильтром усреднения:

Img1 = imread('cameraman.tif');
Im=im2double(Img1);
filteredImage = conv2(Im, ones(3,3));
figure; subplot(1,2,1); imshow(filteredImage, []);title('filtered');
subplot(1,2,2); imshow(Im); title('original');

Вместо деления по ядру я использовал imshow(filteredImage, []).

person Ouissal Benameur    schedule 12.01.2017