【fishing-pan:https://blog.csdn.net/u013921430转载请注明出处】

前言

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

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

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

读取三维TIFF

1.  获取图像信息

clear all
clc;filepath='test.tif';                                        %%图像名称与路径
Info=imfinfo(filepath);                                     %%获取图片信息并判断是否为tif

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

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

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

tif='tif';
format=Info.Format;
if  (strcmp(format ,tif)==0)disp('载入的不是tif图像,请确认载入的数据');                  %%确保载入的图像是tiff图像
endSlice=size(Info,1);                                            %%获取图片z向帧数
Width=Info.Width;
Height=Info.Height;

2. 准备数组

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

Image=zeros(Height,Width,Slice);for i=1:SliceImage(:,:,i)=imread(filepath,i);                                  %%一层一层的读入图像
end

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

写三维TIFF图像

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

for i=1:SliceJ=uint8(Image(:,:,i));           %%一层一层写出图像 %%imwrite(J,[dir,'.tif'],'WriteMode','Append');imwrite(J,[num2str(i,'%04d'),'.tif']);
end

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

方法一:

num2str(i,'%04d')

方法二:

sprintf('%04d',i) 

完整的代码如下

灰度tiff读写代码

clear all
clc;filepath='test.tif';                                         %%图像名称与路径
Info=imfinfo(filepath);                                      %%获取图片信息并判断是否为tiftif='tif';
format=Info.Format;
if  (strcmp(format ,tif)==0)disp('载入的不是tif图像,请确认载入的数据');                %%确保载入的图像是tiff图像
endSlice=size(Info,1);                                          %%获取图片z向帧数
Width=Info.Width;
Height=Info.Height;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Image=zeros(Height,Width,Slice);for i=1:SliceImage(:,:,i)=imread(filepath,i);                         %%一层一层的读入图像
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:SliceJ=uint8(Image(:,:,i));                                   %%一层一层写出图像 %%imwrite(J,[num2str(i,'%4d'),'.tif'],'WriteMode','Append');imwrite(J,[num2str(i,'%04d'),'.tif']);
end

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

clear all
clc;filepath='test.tif';               %%图像名称与路径
Info=imfinfo(filepath);                                      %%获取图片信息并判断是否为tiftif='tif';
format=Info.Format;
if  (strcmp(format ,tif)==0)disp('载入的不是tif图像,请确认载入的数据');                %%确保载入的图像是tiff图像
endSlice=size(Info,1);                                          %%获取图片z向帧数
Width=Info.Width;
Height=Info.Height;Image=zeros(Height,Width,Slice*3);for i=1:SliceImage(:,:,(i-1)*3+1:i*3)=imread(filepath,i);                 %%一层一层的读入彩色图像
end
%%%%%%%%%%%%%%%%%%%%%
图像处理操作
%%%%%%%%%%%%%%%%%%%%%
for i=1:SliceJ=uint8(Image(:,:,(i-1)*3+1:i*3));                            %%一层一层写出图像 %%imwrite(J,[num2str(i,'%4d'),'.tif'],'WriteMode','Append');imwrite(J,[num2str(i,'%04d'),'.tif']);
end

已完。。

【Matlab】Matlab 读写TIFF图像相关推荐

  1. 使用matlab批量读写tiff图像

    matlab的批量读取程序如下: %遍历循环读取所有tiff文件 file_path = 'E:\singleWoodSegement\CHMfenge(0.25)\';% 图像文件夹路径 img_p ...

  2. Matlab写单精度tiff图像

    参考代码 这个里面调用了Matlab的LibTiff库 data = single(magic(10)/10); outputFileName = 'myfile.tif'; % This is a ...

  3. Matlab读写TIFF格式文件

    1.简介 通常情况下,使用MATLAB做图像处理后,使用下面的命令就可以保存处理结果为图片. imwrite(im,'im.bmp'); 而如果需要保存的图像为single或者double类型,或保存 ...

  4. 转Matlab读写TIFF格式文件

    1.简介 通常情况下,使用MATLAB做图像处理后,使用下面的命令就可以保存处理结果为图片. imwrite(im,'im.bmp'); 而如果需要保存的图像为single或者double类型,或保存 ...

  5. matlab 图片转化为avi,在matlab中将tiff图像转换为avi

    我正在尝试使用VideoWriter将大量的tiff图像转换为avi视频.我在使用for循环将图像转换为视频时遇到了麻烦.这里是我到目前为止的代码:在matlab中将tiff图像转换为avi func ...

  6. TIT 数字图像处理 原理与实践(MATLAB) 入门教学 实验一 常用的MATLAB图像处理命令与图像基本操作

    文章目录 数字图像处理 原理与实践(MATLAB) 入门教学 实验一 常用的MATLAB图像处理命令与图像基本操作 实验要求 知识点 实验内容 1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同 ...

  7. matlab 断层 体三维重建,利用MATLAB实现CT断层图像的三维重建

    利用MATLAB实现CT断层图像的三维重建 2期 曾 筝等:利用MATLAB实现CT断层图像的三维重建 25 因此,本文介绍了基于MATLAB进行三维表面重建及体重建的方法,实现起来灵活.方便,便于掌 ...

  8. 利用MATLAB批量读写tif数据(Landsat78)

    利用MATLAB批量读写tif数据(Landsat7&8) 代码来源于:批量读写 代码如下: clc;clear %% 读取NDVI-tif文件 file_path_N = 'E:\';% 图 ...

  9. matlab灰度图像读写

    ** 实验报告 matlab灰度图像读写** 一.程序目的 在Matlab平台下,进行matlab灰度图像读写实验,已知图像在计算机中的表示方法是矩阵的形式,对图像进行读取显示,获取图像信息,图像的各 ...

最新文章

  1. Visual Studio2017 安装教程(走过的坑绝不再走)
  2. python的中文含义-python中的 * 和 ** 作用含义
  3. 还有 13 天,苹果就要关上 HTTP 大门了
  4. 计算机进阶操作,新手进阶Win7系统操作使用手册
  5. pytorch .item_60分钟入门PyTorch,官方教程教授第一个深度学习模型(附链接)
  6. ssis修改数据库数据_SSIS平衡数据分配器概述
  7. 【03】创建型-原型模式
  8. 低分辨率刷视频看了个寂寞?华为HMS Core超分辨率功能助您一招提升用户体验
  9. Serialize Your Deck with Positron [XML Serialization, XSD, C#]
  10. 16. 二元随机变量,离散型随机变量分布律
  11. 微信小程序与内嵌网页交互实现支付功能
  12. MYSQL数据库的数据存储文件
  13. 中国下一个十年的大趋势
  14. ES6——数组数据去重
  15. linux 下 su - oracle 切换不了
  16. 【SAP消息号CK322】
  17. 设计模式-Facade模式
  18. win服务器不能上传文件,Serv u无法上传文件的两种解决方案
  19. C语言 z的意思,请问c语言t=++x||++y++z这句话是什么意思?
  20. arduino最大电压_Arduino Mega 2560测量电压与ADC精度

热门文章

  1. ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
  2. Linux+Tomcat建站笔记(JDK,Mysql,Vsftpd,Iptables等配置)
  3. Linux系统双机热备的方案
  4. Spring Security MVC登录注销示例教程
  5. Docker和Kubernetes如何让DevOps更具效力
  6. php 字符串混合分割并存入数组
  7. 【树莓派】给树莓派安装中文输入法Fcitx及Google拼音输入法
  8. 【Python爬虫】Request库入门
  9. 工作效率 工具_我使用的工具加快了我的工作流程,使我的工作效率更高
  10. swift 富文本编辑_如何使用Swift构建协作式文本编辑器