Razor
Razor

Reputation: 99

Unable to save iverseftt image and image K-Space in matlab

I have a brain MRi image in .png format. I read the image and extract the K-Space and set some of the K-Space as 0

img_fft = fftshift(fft2(img));
sizes = size(img_fft);

row_half = sizes(1)/2;
flag = true;
for r = row_half:sizes(1)
    for c = 1:sizes(2)
        img_fft(r,c) = 0+1i*0;
    end
end

After this I change the image back to image space using

img_back = ifft2(ifftshift(img_fft));

and after this I cast the image to uint8 as that was the original image format. When I try to plot my image using imshow() I get a different output compared to when I write the image using imwrite. Also if I use abs(img_back) in imwrite I get an error.

Error using abs: Complex integers are not supported.

My plotting code is below:

img_back = ifft2(ifftshift(img_fft));
img_back = cast(img_back,'uint8');
subplot(1,3,1), imshow(img)
subplot(1,3,2), imshow(img_back)
subplot(1,3,3), imshow(abs(img_fft),[])
imwrite(abs(img_back),'back_img.png','png')

Can someone tell me what I am doing wrong here?

Upvotes: 0

Views: 102

Answers (1)

dlt_w
dlt_w

Reputation: 378

Take absolute value after inverse Fourier transform and then cast the result to uint8 type:

img_back = abs(ifft2(ifftshift(img_fft)));
img_back = cast(img_back,'uint8');

Upvotes: 1

Related Questions