在 Matlab 中读取和查看大 tiff
Big tiff read and view in Matlab
我从下面的链接下载了一个 btf 文件(big tiff),我该如何阅读它 "imshow"?有没有办法将它转换为 tiff 格式,因为 btf 并不常见?
Link:
https://drive.google.com/file/d/0ByhuP_NuuARtSW9aeTdPUTlRdWM/view?usp=drive_web
http://www.photomacrography.net/forum/viewtopic.php?t=28990&sid=cca737a2e0bc7ea3e2e41f0d6e75f5a9
我使用了这个代码:
t = Tiff('d:/Image_687.btf','w8');
imageData = read(t);
并收到此错误:
Error using tifflib
Unable to retrieve PhotometricInterpretation.
Error in Tiff/getTag (line 838)
tagValue = tifflib('getField',obj.FileID,Tiff.TagID.(tagId));
Error in Tiff/read (line 1487)
photo = obj.getTag('Photometric');
Error in Untitled2 (line 2)
imageData = read(t);
您的代码的真正问题是您传递给 Tiff
的第二个参数。正如 documentation 所述,第二个参数指示以何种模式打开文件。您已指定 w8
,文档说明为:
open TIFF file for writing a BigTIFF file; discard existing contents.
这意味着它甚至在您开始之前就删除了您的图像!如果要使用 Tiff
class,则需要不使用第二个参数或使用 r
参数打开文件进行读取。
t = Tiff('Image_687.btf');
t = Tiff('Image_687.btf', 'r');
话虽这么说,但通常最好尝试使用更高级别的函数加载它,例如 imread
。 Tiff class 是一个非常 lower-level 的函数,操作起来可能有点困难,但可以提供一些所需的特殊功能。
im = imread('Image_687.btf');
size(im)
3072 4080 3
我不得不对显示进行一些操作,因为 RGB 值不在 0 到 255 之间
im = double(im);
im = uint8(255 * im ./ max(im(:)));
imshow(im);
我从下面的链接下载了一个 btf 文件(big tiff),我该如何阅读它 "imshow"?有没有办法将它转换为 tiff 格式,因为 btf 并不常见?
Link:
https://drive.google.com/file/d/0ByhuP_NuuARtSW9aeTdPUTlRdWM/view?usp=drive_web
http://www.photomacrography.net/forum/viewtopic.php?t=28990&sid=cca737a2e0bc7ea3e2e41f0d6e75f5a9
我使用了这个代码:
t = Tiff('d:/Image_687.btf','w8');
imageData = read(t);
并收到此错误:
Error using tifflib Unable to retrieve PhotometricInterpretation.
Error in Tiff/getTag (line 838) tagValue = tifflib('getField',obj.FileID,Tiff.TagID.(tagId));
Error in Tiff/read (line 1487) photo = obj.getTag('Photometric');
Error in Untitled2 (line 2) imageData = read(t);
您的代码的真正问题是您传递给 Tiff
的第二个参数。正如 documentation 所述,第二个参数指示以何种模式打开文件。您已指定 w8
,文档说明为:
open TIFF file for writing a BigTIFF file; discard existing contents.
这意味着它甚至在您开始之前就删除了您的图像!如果要使用 Tiff
class,则需要不使用第二个参数或使用 r
参数打开文件进行读取。
t = Tiff('Image_687.btf');
t = Tiff('Image_687.btf', 'r');
话虽这么说,但通常最好尝试使用更高级别的函数加载它,例如 imread
。 Tiff class 是一个非常 lower-level 的函数,操作起来可能有点困难,但可以提供一些所需的特殊功能。
im = imread('Image_687.btf');
size(im)
3072 4080 3
我不得不对显示进行一些操作,因为 RGB 值不在 0 到 255 之间
im = double(im);
im = uint8(255 * im ./ max(im(:)));
imshow(im);