Почему я получаю темное изображение при использовании обратного преобразования Фурье ifft2 () в matlab? - PullRequest
0 голосов
/ 30 апреля 2020

Я считаю, что что-то не так, когда я конвертирую его обратно с помощью ifft2 (). Я пытаюсь использовать идеальный фильтр нижних частот, создавая матрицу L, которая имеет круг с 1 и радиусом 50. Было бы здорово, если бы вы, ребята, могли сказать мне, в чем проблема. Спасибо!

I0 = imread('image.png');
g = I0(:,:,1);
Rg = imref2d(size(g));


G = fft2(g);
AG1 = log(1+abs(G));
MaxVal = max(max(AG1));

AG2 = uint8(255*(AG1/MaxVal));
SAG2 = fftshift(AG2);


%zero matrix L with a circle with value 1's with radius 50 
[xGrid,yGrid] = meshgrid(1:400,1:400);
L = sqrt((xGrid - 200).^2 + (yGrid - 200).^2) <= 50;

U = uint8(double(SAG2).*L);
a=ifft2(U);


u = uint8(real(ifft2(U)));

imshow(u,'InitialMagnification',300);

1 Ответ

1 голос
/ 01 мая 2020

Вы предпринимаете целую кучу ненужных действий. Как упоминалось в комментариях, все кастинги int8 являются избыточными. Вам также не хватает ifftshift в расчете u. Вот короткая версия, которая делает низкие частоты вы хотите:

I0 = imread('your_file.png');
g = I0(:,:,1);

G = fft2(g);

SAG2 = fftshift(G);

%zero matrix L with a circle with value 1's with radius 50 
[xGrid,yGrid] = meshgrid(1:400,1:400);
L = sqrt((xGrid - 200).^2 + (yGrid - 200).^2) <= 50;

U = SAG2 .* L;

u = real(ifft2(ifftshift(U)));

figure
imshow(u,[]);
...