4

我有一个.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();

信息:

   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]
4

1 回答 1

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();
于 2012-12-08T13:44:58.843 回答