欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

读取三维TIFF

程序员文章站 2022-05-30 11:54:10
...

前言

      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中存储着那些信息;

    读取三维TIFF

 


其中存储着图像的基本信息,比如整个图像的大小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