Ich kann nicht absolut sicher sein, aber es ist sehr unwahrscheinlich, dass Matlab eine versteckte Marke hinzufügt.
Nach tiff Format-Standard, Hinzufügen einer versteckten Marke, tif
Datei, wird nicht dazu führen, dass eine TIFF-Reader-Software fehlschlagen.
Siehe Privat Tags Abschnitt:
Entwickler für einen Block von „privaten Tags“ anwenden können, damit sie ihre eigenen proprietären Informationen in einer TIFF-Datei für Datei Austausch ohne Probleme aufzunehmen. TIFF-Leser sind erforderlich, um Tags zu ignorieren, die sie nicht kennen, und registrierter Entwickler Private-Tags sind nicht garantiert mit jemand anderem Tags oder mit dem Standardsatz von Tags in der Spezifikation definiert kollidieren ...
Es sieht Wie die CT-Images-Software, die Sie verwenden, ist nicht konform mit dem TIFF-Standard.
Es könnte (aber unwahrscheinlich), dass die Software mit einer älteren Version von tiff (Revision 5.0 statt Revision 6.0) entspricht.
Ein Grund für das Scheitern könnte sein, dass Matalb sehr große Streifen schafft, und nicht der Empfehlung von 8K Bytes folgen.
Siehe https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf:
Verwendung eines einzelnen Streifens wird nicht empfohlen. Wählen Sie RowsPerStrip so, dass jeder Streifen etwa 8K Bytes ist, auch wenn die Daten nicht komprimiert sind, da es das Puffern für Leser vereinfacht. Der "8K" -Wert ist ziemlich willkürlich, scheint aber gut zu funktionieren.
Überprüfen Sie den folgenden Code (ich habe here geschrieben):
%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)
Es gibt viele andere Gründe für das Scheitern sein könnte, weil TIFF-Format ist sehr kompliziert (vor allem von der Leseseite).
Als Umgehung ignoriert ** ** ImageMagick ** unerwünschte TIFF-Tags oder unterdrückt sie, und Sie können planen, mehrere TIFF-Bilder parallel in einem einfachen Skript zu schreiben. Sie können auch das 'identify' Programm verwenden, um Ihre Dateien zu untersuchen und zu sehen, was das * branding * ist - verwenden Sie' identify -verbose someImage.tif', oder wenn Sie v7 oder neuer haben, setzen Sie diesen Befehl mit 'magick ... ' –
Wenn Sie' libtiff' installieren - was ich auf einem Mac mit ** homebrew ** mache - erhalten Sie ein Programm mit dem Namen 'tiffdump', das Ihnen alles sagt, was Sie schon immer über TIF-Dateien wissen wollten. –
Wenn proprietäre Software Ihre Forschung einschränkt, haben Sie immer eine andere Option: Open Source. Es gibt ziemlich viel freie Software für die 2D-CT-Rekonstruktion und für die 3D-Rekonstruktion (ich nehme an, dies ist dein Fall, weil ".tif"). ASTRA und TIGRE sind, glaube ich, großartige Optionen. Beide können Bilder von CT-Maschinen rekonstruieren. Haftungsausschluss: Ich habe TIGRE programmiert. –