我正在尝试将我的图像保存为tif 32位,但是我收到了这个错误:
Cannot write uint32 data to a TIFF file
这是我的代码:
for k=1:10
Id{k} = waverec2(t_C,L,'sym8');
filename= ['C:\Path \Id_number_' num2str(k) '.tif'];
Id{k}=uint32(Id{k});
imwrite(Id{k},filename);
end
我需要将图像保存为tif 32位。有什么想法吗?
for k=1:10
Id{k} = waverec2(t_C,L,'sym8');
filename= ['C:\Path \Id_number_' num2str(k) '.tif'];
t = Tiff('filename','a')
Id{k}=uint32(Id{k});
t.write(Id{k});
end
但在Matlab下我收到了这个错误:
Error using tifflib
Unable to retrieve ImageLength.
Error in Tiff/getTag (line 784)
tagValue = tifflib('getField',obj.FileID,Tiff.TagID.(tagId));
Error in Tiff/writeAllStrips (line 1660)
h = obj.getTag('ImageLength');
Error in Tiff/write (line 1228)
obj.writeAllStrips(varargin{:});
答案 0 :(得分:6)
可以使用MATLAB:
%
% Start with:
% http://www.mathworks.com/help/matlab/import_export/exporting-to-images.html#br_c_iz-1
data = uint32(magic(10));
%% -------------------------------------
% Modify these variables to reuse this section: (enclosed by ----s)
% - outputFileName (filename in your question)
% - data (Id{k} in your question)
%
outputFileName = 'myfile.tif';
% This is a direct interface to libtiff
t = Tiff(outputFileName,'w');
% Setup tags
% Lots of info here:
% http://www.mathworks.com/help/matlab/ref/tiffclass.html
tagstruct.ImageLength = size(data,1);
tagstruct.ImageWidth = size(data,2);
tagstruct.Photometric = Tiff.Photometric.MinIsBlack;
tagstruct.BitsPerSample = 32;
tagstruct.SamplesPerPixel = 1;
tagstruct.RowsPerStrip = 16;
tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
tagstruct.Software = 'MATLAB';
t.setTag(tagstruct)
t.write(data);
t.close();
%% -------------------------------------
%%
d = imread('myfile.tif');
disp(class(d));
assert(isequal(d,data))
答案 1 :(得分:1)
虽然TIFF格式支持uint32
,但Matlab却不支持。接受的intput类是double,single,uint8,uint16或logical。
如果您可以接受丢失精度,则可以将其转换为uint16
(使用im2uint16
)。如果不是,您可以使用double
将其转换为im2double
。请注意,im2double
与double (your_uint16_image)
不同,所以请小心。
如果这些选项都不可接受,您可能需要使用libtiff编写自己的mex代码或使用Octave(这将需要使用量子深度32构建的GraphicsMagick)。
编辑:显然还有一个新的TIFF类(请参阅下面的答案),它提供了一个直接的界面。