I have a .tif image where each pixel value (one channel) is a floating point. In any case, to read it using matlab ( imread ), do some operation and write it back in floating point?
If I do imwrite(I,'img.tif') , it is converted to an 8-bit single channel (0 ... 255)
I found this sample only in 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]
source share