假设我们在磁盘上有一个简单的RGB图像。
如果我们使用imread()
阅读图片,则会将其存储为uint8
类型。然后我使用fft()
对其进行离散傅立叶变换,返回的图像为double
类型。
现在,在将此数据作为图像存储在磁盘上时,使用imwrite()
,然后再次使用imread()
进行读取,数据的精度似乎会丢失,并且图像再次存储为{{1} }。
这意味着,我无法对保存的DFT图像进行逆离散傅里叶变换!我该如何处理这个?
答案 0 :(得分:0)
您需要使用支持浮点图像的文件格式。蒂夫就是其中之一。 imwrite没有灵活性所以你需要使用Tiff类。这不适用于复杂数据。如果它很复杂,我会使用matlabs mat格式。
function imwriteDouble(filename,data)
% imwriteDouble(filename,data) saves floating point data in tiff image
n=ndims(data);
t=Tiff(filename,'w');
tagstruct.ImageLength = size(data,1);
tagstruct.ImageWidth = size(data,2);
tagstruct.BitsPerSample = 64;
if n==2
tagstruct.SamplesPerPixel = 1;
tagstruct.Photometric = Tiff.Photometric.MinIsBlack;
elseif n == 3
tagstruct.SamplesPerPixel = 3;
tagstruct.Photometric = Tiff.Photometric.RGB;
else
error('Image must have 2 or 3 dimensions');
end
tagstruct.Compression=Tiff.Compression.None;
tagstruct.SampleFormat=Tiff.SampleFormat.IEEEFP;
tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
t.setTag(tagstruct);
t.write(data);
t.close();
end
您可以使用imread
阅读图像。