我已经获得了图像的傅里叶谱,并希望将结果图像保存到我的代码中指定的文件夹中。
但是由于结果图像是“double”类型,我无法保存它。我在给定文件夹中获取空白图像。我该怎么办?
这是我的代码
clc;
clear all;
close all;
i=imread('D:\pendrive\test1.jpg');
i=rgb2gray(i);
subplot(2,2,1),imshow(i);title('Test Image');
f=fftn(i);
magnitude=abs(f);
phase=angle(f);
f1=log(1+fftshift(f));
subplot(2,2,2),imshow(f1,[]);title('Fourier spectrum');
a=strcat('C:\Users\Public\Pictures\Sample Pictures\results\Fourier spectrum\','.jpg');
imwrite(f1,a);
答案 0 :(得分:1)
如果imwrite收到一个双重图像,则假设范围介于0和1之间。这意味着如果你的东西小于0,它们会缩放到0(黑色),但最重要的是在你的情况下超过1的所有内容都将缩小为1(白色) 这是因为imwrite在接收双重图像时所做的只是
yourImage .* 255
因此它最终得到了每个通道每像素使用8位图像的经典范围。
您可以通过在调用imwrite之前缩放值,例如它们在[0 ... 1]范围内来解决您的问题。这可以通过这种方式轻松完成:
yourImageScaled = (yourImage-min(yourImage(:)))./(max(yourImage(:))- min(yourImage(:)));
或者您只需执行
即可尝试转换为uint8uint8(yourImage)
请注意,根据您的值,uint8转换也可能会产生不理想的结果(例如,如果您的FT幅度在2到20之间,则所有内容看起来几乎都是黑色)。因此,您最好对结果值进行缩放,以便更好地观察最终结果。
由于这最后一句话,我建议你提出第一个选项,即[0 ... 1]范围内的缩放。