Matlab用浮点值写图像?

时间:2012-12-08 12:22:41

标签: image matlab floating-point tiff

我有一个.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]

1 个答案:

答案 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();