2016-09-19 9 views
0

Я пытаюсь создать Габор банк фильтров в области Фурье, используя следующий код в Matlab:Проектирование банка фильтров Габора в области Фурье

for i=1:u 
for j = 1:v 
    theta =theta_list(j); 
    w_1_x=(centerFreq(1,i)*((m+1)/2)*cos(theta)); % size of filter and image is m-by-n 
    w_1_y=(centerFreq(2,i)*((n+1)/2)*sin(theta)); 
    w_2_x=(-centerFreq(1,i)*((m+1)/2)*cos(theta)); 
    w_2_y=(-centerFreq(2,i)*((n+1)/2)*sin(theta)); 
    sigma=sqrt((w_1_x)^2+(w_1_y)^2); 
    sigma_H=sigma/(2*pi); 
    gF=fspecial('gaussian', [m,n], sigma_H); 
    gFilter1=circshift(gF, [round(w_1_x), round(w_1_y)]); 
    gFilter2=circshift(gF, [round(w_2_x), round(w_2_y)]); 
    gaborArray1{i,j} = 0.5*gFilter1+0.5*gFilter2; 
    gaborArray2{i,j} = 0.5*1i*gFilter1-0.5*1i*gFilter2; 
    gaborFilterBank{i,j}=gaborArray1{i,j}+1i.*gaborArray2{i,j}; 
end 
end 

Однако, когда я преобразовать фильтр в области изображения используя следующий код и визуализировать фазы карту фильтра:

filter=ifft2(ifftshift(gaborFilterBank{i,j})); 
phase=zeros(m, n); 
for p=1:m 
for q=1:n 
    phase(p,q)=atan(imag(filter(p,q)/real(filter(p,q))); 
    end 
end 
figure, imshow(phase, []); 

я получаю странные узоры в центре фильтра (как показано на прилагаемом рисунке). Не могли бы вы сообщить мне, что не так с моим кодом?

enter image description here

ответ

0

Я нашел проблему. Вместо умножения центральных координат на [(m + 1)/2, (n + 1)/2], я должен был умножить их на [m, n]. Более конкретно, вместо:

w_1_x=(centerFreq(1,i)*((m+1)/2)*cos(theta)); % size of filter and image is m-by-n 
w_1_y=(centerFreq(2,i)*((n+1)/2)*sin(theta)); 
w_2_x=(-centerFreq(1,i)*((m+1)/2)*cos(theta)); 
w_2_y=(-centerFreq(2,i)*((n+1)/2)*sin(theta)); 

Оно должно быть:

w_1_x=(centerFreq(1,i)*m*cos(theta)); % size of filter and image is m-by-n 
w_1_y=(centerFreq(2,i)*n*sin(theta)); 
w_2_x=(-centerFreq(1,i)*m*cos(theta)); 
w_2_y=(-centerFreq(2,i)*n*sin(theta)); 

 Смежные вопросы

  • Нет связанных вопросов^_^