我有一个.tif
图像,其中每个像素值(单个通道)都是浮点。无论如何用matlab(imread
)读取它做一些操作并以浮点形式写回来?
如果我做imwrite(I,'img.tif')
它会转换为8位单通道(0 ... 255)
我只在mathworks上找到了这个示例:
info = imfinfo(filename);
t = Tiff(filename, 'w');
tagstruct.ImageLength = size(timg, 1);
tagstruct.ImageWidth = size(timg, 2);
tagstruct.Compression = Tiff.Compression.None;
tagstruct.SampleFormat = Tiff.SampleFormat.IEEEFP;
tagstruct.Photometric = Tiff.Photometric.MinIsBlack;
tagstruct.BitsPerSample = info.BitsPerSample; % 32;
tagstruct.SamplesPerPixel = info.SamplesPerPixel; % 1;
tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
t.setTag(tagstruct);
t.write(timg);
t.close();
Imfinfo:
info =
Filename: [1x110 char]
FileModDate: '04-dic-2012 12:02:07'
FileSize: 45720930
Format: 'tif'
FormatVersion: []
Width: 2724
Height: 4193
BitDepth: 32
ColorType: 'grayscale'
FormatSignature: [73 73 42 0]
ByteOrder: 'little-endian'
NewSubFileType: 0
BitsPerSample: 32
Compression: 'Uncompressed'
PhotometricInterpretation: 'BlackIsZero'
StripOffsets: [4193x1 double]
SamplesPerPixel: 1
RowsPerStrip: 1
StripByteCounts: [4193x1 double]
XResolution: 100
YResolution: 100
ResolutionUnit: 'None'
Colormap: []
PlanarConfiguration: 'Chunky'
TileWidth: []
TileLength: []
TileOffsets: []
TileByteCounts: []
Orientation: 1
FillOrder: 1
GrayResponseUnit: 0.0100
MaxSampleValue: 4.2950e+09
MinSampleValue: 0
Thresholding: 1
Offset: 45720696
SampleFormat: 'IEEE floating point'
ModelPixelScaleTag: [3x1 double]
ModelTiepointTag: [6x1 double]
GeoKeyDirectoryTag: [52x1 double]
GeoDoubleParamsTag: [3x1 double]
答案 0 :(得分:3)
如果你想要做的是读取包含浮点数的.tif,操纵它并再次写出来,你的代码示例应该运行良好。只需添加文件读取和图像处理,它应该工作得很好。
img = imread(in_filename)
timg = 2*timg;
info = imfinfo(in_filename);
t = Tiff(out_filename, 'w');
tagstruct.ImageLength = size(timg, 1);
tagstruct.ImageWidth = size(timg, 2);
tagstruct.Compression = Tiff.Compression.None;
tagstruct.SampleFormat = Tiff.SampleFormat.IEEEFP;
tagstruct.Photometric = Tiff.Photometric.MinIsBlack;
tagstruct.BitsPerSample = info.BitsPerSample; % 32;
tagstruct.SamplesPerPixel = info.SamplesPerPixel; % 1;
tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
t.setTag(tagstruct);
t.write(timg);
t.close();