2013-11-29 4 views
2

Я создал многостраничные файлы tiff с макросом в ImageJ, и теперь я пытаюсь открыть его с помощью matlab, но я могу получить доступ только к первому кадру.Matlab только открывает первый кадр многостраничного tiff-стека

Вот результат imfinfo (имя файла). Соответственно, я получаю

length(imfinfo(filename)) = 1 

Filename: [1x129 char] 
       FileModDate: '28-nov-2013 12:27:51' 
       FileSize: 6.7905e+09 
        Format: 'tif' 
      FormatVersion: [] 
        Width: 512 
        Height: 512 
       BitDepth: 8 
       ColorType: 'grayscale' 
      FormatSignature: [77 77 0 42] 
       ByteOrder: 'big-endian' 
      NewSubFileType: 0 
      BitsPerSample: 8 
       Compression: 'Uncompressed' 
PhotometricInterpretation: 'BlackIsZero' 
      StripOffsets: 932625 
      SamplesPerPixel: 1 
      RowsPerStrip: 512 
      StripByteCounts: 262144 
       XResolution: [] 
       YResolution: [] 
      ResolutionUnit: 'None' 
       Colormap: [] 
     PlanarConfiguration: 'Chunky' 
       TileWidth: [] 
       TileLength: [] 
       TileOffsets: [] 
      TileByteCounts: [] 
       Orientation: 1 
       FillOrder: 1 
     GrayResponseUnit: 0.0100 
      MaxSampleValue: 255 
      MinSampleValue: 0 
      Thresholding: 1 
        Offset: 8 
     ImageDescription: 'ImageJ=1.47q 
images=25900 
slices=25900 
loop=false 

Однако если открыть тот же файл TIF в ImageJ, то я могу читать и пролистать 25900 кадров ... Странно то, что MATLAB может читать предыдущие многостраничный TIFF я создал в imageJ без моего макроса партии ...

Я не понимаю, что происходит ... любая помощь будет принята с благодарностью! Спасибо, Стивен

ответ

1

Вы должны перебрать все изображения в стеке:

fname = 'my_file_with_lots_of_images.tif'; 
info = imfinfo(fname); 
imageStack = []; 
numberOfImages = length(info); 
for k = 1:numberOfImages 
    currentImage = imread(fname, k, 'Info', info); 
    imageStack(:,:,k) = currentImage; 
end 
+0

Спасибо за ваш комментарий, но я уже это делал. Я действительно понял, что эта ошибка объясняется большим размером стека tiff: всякий раз, когда он больше, чем около 5 Гб, Matlab видит только первый кадр, но если я уменьшаю размер, разбивая файл, тогда он работает ... Довольно раздражает, потому что мне пришлось переписать сценарий, но я не нашел другого решения ... – user3049481

+0

Интересно! Я буду помнить об этом. – Olivier

1

Это на самом деле ImageJ «s вина. Для больших TIFF вместо использования стандарта BigTiff для сохранения стека ImageJ вместо этого сохраняет исходный файл с поддельным заголовком TIFF, содержащим первый кадр, и с радостью называет его .tif. Вы можете обсудить с разработчиками ImageJ, почему они считают, что это хорошая идея.

Чтобы прочитать эти стеки в Matlab, вы можете использовать memmapfile или MappedTensor.

+0

Теперь есть поддержка поддельных файлов TIF в ImageJ в 'TIFFStack': http://github.com/DylanMuir/TIFFStack –

Смежные вопросы