Я не могу быть абсолютно уверен, но маловероятно, что Matlab добавляет скрытый бренд.
В соответствии со стандартом tiff, добавив скрытый бренд в файл tif
, не приведет к сбою программы чтения tiff.
См Частных тегов раздела:
Разработчики могут применять для блока «частных тегов», чтобы они могли включать свою собственную конфиденциальную информацию внутри файла TIFF, не вызывая проблемы для обмена файлов. TIFF читатели должны игнорировать тег, которые они не распознают, и частные тег зарегистрированного разработчика гарантируется не конфликтовать с кем-то еще тегами или со стандартным набором тегов, определенных в спецификации ...
Это выглядит как программное обеспечение CT-изображений, которое вы используете, не соответствует стандарту tiff.
Это может быть (но маловероятно), что программное обеспечение соответствует более старой версии tiff (версия 5.0 вместо версии 6.0).
Одной из причин отказа может быть то, что Matalb создает очень большие полосы и не соответствует рекомендациям 8K байтов.
Обратитесь к https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf:
Использование одной полосы не рекомендуется. Выберите RowsPerStrip таким образом, чтобы каждая полоса была около 8K байтов, даже если данные не сжаты, так как она делает буферизацию более простой для читателей. Значение «8K» довольно произвольно, но, похоже, работает хорошо.
Проверьте следующий код (я отправил here):
%Simulate large image (to be saved as tiff later)
I = imread('peppers.png');
I = repmat(I, [4, 4]);
t = Tiff('I.tif', 'w');
width = size(I, 2);
height = size(I, 1);
rows_per_strip = 1; %Select 1 row per strip (assume image row is less then 8K bytes).
setTag(t, 'ImageLength', height)
setTag(t, 'ImageWidth', width)
setTag(t, 'Photometric', Tiff.Photometric.RGB)
setTag(t, 'BitsPerSample', 8)
setTag(t, 'SamplesPerPixel', 3)
setTag(t, 'RowsPerStrip', rows_per_strip)
setTag(t, 'PlanarConfiguration', Tiff.PlanarConfiguration.Chunky)
%setTag(t, 'Compression', Tiff.Compression.LZW)
setTag(t, 'Compression', Tiff.Compression.None) %Try without compression
n_strips = ceil(height/rows_per_strip); %Total number of strips.
h = waitbar(0, 'In process');
%Write the tiff image strip by strip (and advance the waitbar).
for i = 1:n_strips
y0 = (i-1)*rows_per_strip + 1; %First row of current strip.
y1 = min(y0 + rows_per_strip - 1, height); %Last row of current strip.
writeEncodedStrip(t, i, I(y0:y1, :, :)) %Write strip rows y0 to y1.
waitbar(i/n_strips, h); %Update waitbar.
drawnow %Force GUI refresh.
end
close(t)
close(h)
Там может быть много других причин для отказа, потому что формат TIFF очень сложно (особенно со стороны читателя).
В процессе работы ** ImageMagick ** игнорирует или подавляет нежелательные теги TIFF, и вы можете запланировать повторную запись нескольких изображений TIFF параллельно в простом скрипте. Кроме того, вы можете использовать свою программу 'ident' для проверки ваших файлов и посмотреть, что такое * брендинг *, - используйте' ident-overbose someImage.tif', или если у вас есть v7 или более новый, префикс этой команды с помощью 'magick ... ' –
Если вы устанавливаете' libtiff' - что я делаю на Mac, используя ** homebrew ** - вы получаете программу под названием 'tiffdump', которая также расскажет вам все, что вы когда-либо хотели узнать о файлах TIF. –
Если проприетарное программное обеспечение - это то, что ограничивает ваше исследование, у вас всегда есть другой вариант: с открытым исходным кодом. Существует много свободного программного обеспечения для реконструкции 2D CT и для 3D-реконструкции (я предполагаю, что это ваш случай, потому что '.tif') ASTRA и TIGRE, я считаю, отличные варианты. Оба могут восстанавливать изображения с компьютеров CT. Отказ от ответственности: я запрограммировал TIGRE. –