Я только что наткнулся на этот вопрос и пытаюсь узнать о его влиянии, практически проверяя его.
Рассмотрим (nxn) ядро Гаусса. Выберите соответствующую дисперсию для того же. Выполните линейную и круговую свертки в частотной области с этим ядром на изображении. Можете что-нибудь сказать о результатах?
Я попытался реализовать вышеописанное в Matlab со следующим кодом.
clc;
close all;
clear all;
I = imread('my_face.jpg');
Irez = imresize(I,[512 512]); %resize image
figure(1);
imshow(Irez);
Irez = rgb2gray(Irez);
M = 2*size(I,1)+1;
N = 2*size(I,2)+1;
Ifreq = fft2(I,M,N);
gaus = fspecial('gaussian',5,0.7);
Igaus = conv2(gaus,abs(Ifreq));
Iface = real(ifft2(Igaus));
Iout = Iface(1:size(I,1),1:size(I,2));
figure(2)
imshow(Iout);
Мои вопросы:
Я на правильном пути? Делаю ли я то, чего от меня ожидает проблема? Или я должен взять или рассмотреть БПФ ядра Гаусса или иметь аналогичное ядро Гаусса в частотной области? Пожалуйста, скажите мне, если вы, ребята, нашли правильный способ добиться этого.
Эквивалентом линейной свертки является умножение. Что является эквивалентом круговой свертки?
Более того, приведенный выше код дает мне следующую ошибку:
Неопределенная функция или метод «conv2» для входных аргументов типа «двойной» и атрибутов «полный трехмерный реальный»
Очевидно, что оба должны быть двойными для ввода conv2. Не могли бы вы помочь мне практически реализовать проблему?