Я смотрю на код, который выполняет размытие изображений. Однако у меня проблемы с пониманием кода, и мне было интересно, может ли кто-нибудь помочь мне примерно понять, что делает код.
Здесь переменная Iref - изображение.
Imin = min(Iref(:));
Iref_fft = Iref-Imin;
Iref_fft = fftshift(Iref_fft,1);
Iref_fft = fftshift(Iref_fft,2);
Iref_fft = fft(Iref_fft,[],1);
Iref_fft = fft(Iref_fft,[],2);
Iref_fft = fftshift(Iref_fft,1);
Iref_fft = fftshift(Iref_fft,2);
Здесь я уже не понимаю, что значит применить fftshift к изображению, которое еще не находится в области Фурье. Итак, я могу сказать, что он выполняет преобразование Фурье по каждой из осей, но почему он выполняет fftshift до и после?
Код выглядит следующим образом:
Nx_r = 32;
Ny_r = 32;
sigma = 1.5;
wx = reshape(gausswin(Nx_r,sigma), [1 Nx_r]);
wy = reshape(gausswin(Ny_r,sigma), [Ny_r 1]);
wx_rep = repmat(wx, [Ny_r 1]);
wy_rep = repmat(wy, [1 Nx_r]);
Window = wx_rep .* wy_rep;
xIndices = floor((Nx-Nx_r)/2)+1 : floor((Nx-Nx_r)/2)+Nx_r;
yIndices = floor((Ny-Ny_r)/2)+1 : floor((Ny-Ny_r)/2)+Ny_r;
Iref_blurred = zeros(Ny,Nx);
Iref_blurred(yIndices,xIndices,:) = Iref_fft(yIndices,xIndices) .* Window;
Iref_blurred = fftshift( ifft2( fftshift(Iref_blurred) ) );
Iref_blurred = abs(Iref_blurred)+Imin;
На следующих этапах, я думаю, мы выполняем размытие по Гауссу. Однако я думал, что ядро также должно быть сгенерировано в области Фурье, прежде чем мы сможем умножить их, как строку:
Iref_blurred(yIndices,xIndices,:) = Iref_fft(yIndices,xIndices) .* Window;
Я не уверен, является ли Window преобразованием Фурье ядра свертки Гаусса или, по крайней мере, не могу сказать это из кода.
Итак, я немного сбит с толку относительно того, как достигается размытие по Гауссу. Приветствуется любая помощь в понимании этого кода.