读取三维TIFF

前言

      Matlab用来读取图像的函数是imread(),顾名思义image read,同样的道理写图片的函数是imwrite();

      但是imread()函数可以用来读取二维的图像,例如jpg、png、bmp格式以及二维的tiff图像,对于三维的Tiff图像,却无法读取整张图像,如果直接使用imread,那么被读取的是三维数据中的第一帧。

      那么如何读取三维的TIFF图像呢?

 

读取三维TIFF

    1.  获取图像信息

 
  1. clear all

  2. clc;

  3.  
  4. filepath='test.tif'; %%图像名称与路径

  5. Info=imfinfo(filepath); %%获取图片信息并判断是否为tif

 

首先,我们来看Info中存储着那些信息;

    

 


其中存储着图像的基本信息,比如整个图像的大小FileSize,存储了单张图像的尺寸Width与Height,存储了图像有多少张字段,以及图像的位深 BitDepth等信息。

     获得这些信息后,我们就可以准备读入图像了。

 
  1. tif='tif';

  2. format=Info.Format;

  3. if (strcmp(format ,tif)==0)

  4. disp('载入的不是tif图像,请确认载入的数据'); %%确保载入的图像是tiff图像

  5. end

  6.  
  7. Slice=size(Info,1); %%获取图片z向帧数

  8. Width=Info.Width;

  9. Height=Info.Height;

 2. 准备数组

       我们已经获得了图像的信息,在这之后,我们需要声明一个三维的数组,然后一层一层的读入图像就可以了;

 
  1. Image=zeros(Height,Width,Slice);

  2.  
  3. for i=1:Slice

  4. Image(:,:,i)=imread(filepath,i); %%一层一层的读入图像

  5. end

     至此,我们读入图像的过程就已经结束,Image这个数组就是我们所获得的三维图像,后续我们只需要对这个数组进行操作即可。

 

写三维TIFF图像

        写图像我们就用imwrite()函数就好,但是在使用的过程中,总是出现问题,不得不说matlab对于三位TIFF图像的支持不够。所以,我都是现将图像的每一帧进行输出最后利用其它软件进行合并,例如Fiji。      

 
  1. for i=1:Slice

  2. J=uint8(Image(:,:,i)); %%一层一层写出图像

  3.  
  4. %%imwrite(J,[dir,'.tif'],'WriteMode','Append');

  5. imwrite(J,[num2str(i,'%04d'),'.tif']);

  6. end

       以上代码中,被注释掉的就是直接写TIFF的代码,当TIFF图像帧数不多时,可以尝试用该方法,就是加上一个Append的写出模式,这种模式下,不可以使用parobj,否则图像是乱序的。      在这里需要提醒大家,在写出图像的时候,要保证图像序号的一致性,比如,100张图像,序号应该是0001-0100.tif,而不是1-100.tif,后者的话,Fiji等软件时无法将其读入同一个图像栈的,也就无法保存。

    方法一:

num2str(i,'%04d')

     方法二:

sprintf('%04d',i) 

完整的代码如下

灰度tiff读写代码

 
  1. clear all

  2. clc;

  3.  
  4. filepath='test.tif'; %%图像名称与路径

  5. Info=imfinfo(filepath); %%获取图片信息并判断是否为tif

  6.  
  7. tif='tif';

  8. format=Info.Format;

  9. if (strcmp(format ,tif)==0)

  10. disp('载入的不是tif图像,请确认载入的数据'); %%确保载入的图像是tiff图像

  11. end

  12.  
  13. Slice=size(Info,1); %%获取图片z向帧数

  14. Width=Info.Width;

  15. Height=Info.Height;

  16.  
  17. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  18. Image=zeros(Height,Width,Slice);

  19.  
  20. for i=1:Slice

  21. Image(:,:,i)=imread(filepath,i); %%一层一层的读入图像

  22. end

  23.  
  24. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  25. for i=1:Slice

  26. J=uint8(Image(:,:,i)); %%一层一层写出图像

  27. %%imwrite(J,[num2str(i,'%4d'),'.tif'],'WriteMode','Append');

  28. imwrite(J,[num2str(i,'%04d'),'.tif']);

  29. end

彩色tiff图像读写代码(注意,这是彩色图像的代码,灰度图像的代码在上方)

 
  1. clear all

  2. clc;

  3.  
  4. filepath='test.tif'; %%图像名称与路径

  5. Info=imfinfo(filepath); %%获取图片信息并判断是否为tif

  6.  
  7. tif='tif';

  8. format=Info.Format;

  9. if (strcmp(format ,tif)==0)

  10. disp('载入的不是tif图像,请确认载入的数据'); %%确保载入的图像是tiff图像

  11. end

  12.  
  13. Slice=size(Info,1); %%获取图片z向帧数

  14. Width=Info.Width;

  15. Height=Info.Height;

  16.  
  17. Image=zeros(Height,Width,Slice*3);

  18.  
  19. for i=1:Slice

  20. Image(:,:,(i-1)*3+1:i*3)=imread(filepath,i); %%一层一层的读入彩色图像

  21. end

  22. %%%%%%%%%%%%%%%%%%%%%

  23. 图像处理操作

  24. %%%%%%%%%%%%%%%%%%%%%

  25. for i=1:Slice

  26. J=uint8(Image(:,:,(i-1)*3+1:i*3)); %%一层一层写出图像

  27. %%imwrite(J,[num2str(i,'%4d'),'.tif'],'WriteMode','Append');

  28. imwrite(J,[num2str(i,'%04d'),'.tif']);

  29. end


转载【fishing-panhttps://blog.csdn.net/u013921430

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值