无法写出类型' double'

时间:2014-06-06 09:45:26

标签: image matlab

我已经获得了图像的傅里叶谱,并希望将结果图像保存到我的代码中指定的文件夹中。

但是由于结果图像是“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);

1 个答案:

答案 0 :(得分:1)

如果imwrite收到一个双重图像,则假设范围介于0和1之间。这意味着如果你的东西小于0,它们会缩放到0(黑色),但最重要的是在你的情况下超过1的所有内容都将缩小为1(白色) 这是因为imwrite在接收双重图像时所做的只是

 yourImage .* 255

因此它最终得到了每个通道每像素使用8位图像的经典范围。

您可以通过在调用imwrite之前缩放值,例如它们在[0 ... 1]范围内来解决您的问题。这可以通过这种方式轻松完成:

yourImageScaled = (yourImage-min(yourImage(:)))./(max(yourImage(:))- min(yourImage(:)));

或者您只需执行

即可尝试转换为uint8
uint8(yourImage)

请注意,根据您的值,uint8转换也可能会产生不理想的结果(例如,如果您的FT幅度在2到20之间,则所有内容看起来几乎都是黑色)。因此,您最好对结果值进行缩放,以便更好地观察最终结果。

由于这最后一句话,我建议你提出第一个选项,即[0 ... 1]范围内的缩放。