Свертка в частотной области Matlab

Я только что наткнулся на этот вопрос и пытаюсь узнать о его влиянии, практически проверяя его.

Рассмотрим (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);

Мои вопросы:

  1. Я на правильном пути? Делаю ли я то, чего от меня ожидает проблема? Или я должен взять или рассмотреть БПФ ядра Гаусса или иметь аналогичное ядро ​​Гаусса в частотной области? Пожалуйста, скажите мне, если вы, ребята, нашли правильный способ добиться этого.

  2. Эквивалентом линейной свертки является умножение. Что является эквивалентом круговой свертки?

Более того, приведенный выше код дает мне следующую ошибку:

Неопределенная функция или метод «conv2» для входных аргументов типа «двойной» и атрибутов «полный трехмерный реальный»

Очевидно, что оба должны быть двойными для ввода conv2. Не могли бы вы помочь мне практически реализовать проблему?


person Lakshmi Narayanan    schedule 18.09.2013    source источник
comment
Вы путаетесь. Похоже, вы берете ДПФ изображения, применяете к нему свертку в частотной области, а затем выполняете обратное ДПФ. Суть вопроса в том, чтобы показать, что свертка в пространственной области может быть выполнена в частотной области, но операция другая. Чтобы выполнить круговую свертку в частотной области, вам нужно взять ДПФ изображения и ядра, поэлементно умножить их коэффициенты Фурье, а затем взять обратное ДПФ результата. Это (иногда) более быстрый способ фильтрации.   -  person Justin    schedule 18.09.2013
comment
По крайней мере, это была бы моя интерпретация вопроса... но это кажется немного неясным...   -  person Justin    schedule 18.09.2013
comment
stackoverflow.com/questions/14025967/   -  person chappjc    schedule 18.09.2013
comment
@jucestain ты прав. Я должен рассмотреть dft как гауссова, так и изображения и попробовать свертку в частотной области. не могли бы вы подробно рассказать мне, как я могу это сделать? Очень жаль, что спрашиваю снова.   -  person Lakshmi Narayanan    schedule 19.09.2013


Ответы (1)


Мне кажется, вы предоставляете правильные аргументы в функции fspecial. Вы должны указать количество столбцов и строк в этой функции. Я скопировал следующие строки из справки Matlab:

h = fspecial('average', hsize) возвращает усредняющий фильтр h размера hsize. Аргумент hsize может быть вектором, определяющим количество строк и столбцов в h, или может быть скаляром, и в этом случае h является квадратной матрицей. Значение по умолчанию для hsize — [3 3].

gaus = fspecial('gaussian', [M N],5,0.7);

Подробнее об этом можно узнать здесь: http://www.mathworks.se/help/images/ref/fspecial.html

person User1551892    schedule 18.09.2013