matlab中图像格式转换
uint 8:无符号的8位(8bit)整型数据(unit 都是存储型)
int :整型数据
1、在MATLAB中,数值一般都采用double型(64位)存储和运算.
2、为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。
3、函数image能够直接显示8位图像,但8位型数据和double型数据在image中意义不一样,
4、对于索引图像,数据矩阵中的值指定该像素的颜色种类在色图矩阵中的行数。当数据矩阵中的值为0时,表示用色图矩阵中第一行表示的颜色绘制;当数据矩阵中的值为1时,表示用色图矩阵中的第二行表示的颜色绘制该像素,数据与色图矩阵中的行数总是相差1。所以,索引图像double型和uint8型在显示方法上没有什么不同,只是8位数据矩阵的值和颜色种类之间有一个偏差1。调用格式均为image(x); colormap(map);
5、对于灰度图像,uint8表示范围[0,255],double型表示范围[0,1]。可见,double型和uint8型灰度图像不一样,二者转换格式为:
I8=uint8 (round (I64*255)); !!double转换成uint 8
I64=double (I8)/255; !!!uint转换成double
反之,imread根据文件中的图像种类作不同的处理。当文件中的图像为灰度图像时,imread把图像存入一个8位矩阵中,把色图矩阵转换为双精度矩阵,矩阵中每个元素值在[0,1]内;当为RGB图像时,imread把数据存入到一个8位RGB矩阵中。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double
因此
I2=im2double(I1) :把图像数组I1转换成double精度类型;
如果不转换,在对uint8进行加减时会产生溢出
图像数据类型转换函数
默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。
im2double():将图象数组转换成double精度类型
im2uint8():将图象数组转换成unit8类型
im2uint16():将图象数组转换成unit16类型
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
默认情况下,matlab将图像中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。
但是,问题的真正的解释其实应该是这样的。首先是在数据类型转换时候uint8和im2uint8的区别,uint的操作仅仅是将一个double类型的小数点后面的部分去掉;但是im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所有其他值乘以255。
图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精度。很多矩阵的很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式。如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间,这个是由Matlab中的规定),那么可以直接使用im2uint8。
如果转换前不满足这个分布规律,则使用uint8,将其自动切割至0~255(超过255的按255)最好使用mat2gray,这个函数可以把一个double类的任意数组转换成取值范围在[0,1]之间的,将一个矩阵转化为灰度图像的数据格式(double)另外,可以用isgray判断矩阵是否是一个图像数据矩阵。
matlab中用imshow()显示图像与图像矩阵的数据类型的关系
在matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。 那么如何解决这个问题呢?笔者曾经用fix()函数把图像矩阵由实数形式转化成整数形式,但这样仍无法改变图像矩阵是double型的事实。 通过搜索,找到两个解决方法: imshow(I/256); -----------将图像矩阵转化到0-1之间 imshow(I,[]); -----------自动调整数据的范围以便于显示 (不明白原理!%lwb 添加内容:此处用了图像灰度拉伸方法,将图像最小的像素值变为0,最大的为255%) 从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些!不知什么原理! 此外还找到一些方法,还没有试过,记录如下:
uint8和im2uint8的区别
图像数据在计算前需要转换为double,以保证精度; 很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式. 如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间),那么可以直接使用im2uint8 如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255(超过255的按255) 最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double) 另外,可以用isgray判断矩阵是否是一个图像数据矩阵
总之,im2uint8、im2double要跟uint8、double区别开来。
double 就是简单地把一个变量类型转换成double类型,数值大小不变;
比如 a=6 是个unit8类型的话,double(a)的结果还是6,不过现在这个6是double类型的。
函数im2double将输入转换成double类型。如果输入是 uint8 unit16 或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间,当然就是double类型的了。如果输入本身就是double类型,输出还是double类型,并不进行归一化。。
!!!!!!!!!!!!!!!!!!!
imhist(I)
为图像,在灰度条上显示一个直方图。直方图中bin的数目有图像的类型决定。如果I是个灰度图像,imhist将使用默认值256个bins。如果I是一个二值图像,imhist使用两bins。
imhist(I, n)
使用指定的n个bin来绘制直方图。n同时也制定了颜色条的长度,如果是二值图像,n只能赋值为2。
imhist(X, map)
为索引文件显示直方图。这个直方图在colormap图上显示像素值的分布。colormap必须至少和X最大索引一样长。
[counts,x] = imhist(...)
bin应该是直方图直方的个数,要把灰度归为几类,有几个直方形,就有几个bin。这样,如果设定了bins,那么其他颜色之类,应该以一种算法归于最近的bin。
matlab中图像格式转换相关推荐
- lisp如何将度分秒转换为弧度_地学中常用度、度分、度分秒,弧度、角度在MATLAB中的转换...
地学中常用度.度分.度分秒,弧度.角度在MATLAB中的转换 转化为角度: deg = DMS2DEG(35,20,10) deg = 35.3361 转化为弧度 rad=DMS2RAD(35,20, ...
- matlab中度数化成度分秒,地学中常用度、度分、度分秒,弧度、角度在MATLAB中的转换...
地学中常用度.度分.度分秒,弧度.角度在MATLAB中的转换 转化为角度: deg = DMS2DEG(35,20,10) deg = 35.3361 转化为弧度 rad=DMS2RAD(35,20, ...
- python基础教程:Python图像处理库PIL中图像格式转换的实现
这篇文章主要介绍了Python图像处理库PIL中图像格式转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 在数字图像处理 ...
- Python图像处理库PIL中图像格式转换(一)
参考:https://blog.csdn.net/icamera0/article/details/50843172 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我 ...
- Python图像处理库PIL中图像格式转换
在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL来实 ...
- Excel日期格式在matlab中的转换
Excel支持的日期格式如下:2011*8*12,*可以为"年"."/"."-"等形式,然而使用xlsread函数后肯定会转为字符串格式,不 ...
- excel matlab日期,Excel日期格式在matlab中的转换
Excel支持的日期格式如下:2011*8*12,*可以为"年"."/"."-"等形式,然而使用xlsread函数后肯定会转为字符串格式,不 ...
- MATLAB中角度转换成弧度函数——degtorad
degtorad Convert angles from degrees to radians 将角度从度数转换为弧度 Syntax:angleInRadians = degtorad(angleIn ...
- Matlab斜率转弧度,MATLAB中角度转换成弧度函数——degtorad
degtorad Convert angles from degrees to radians 将角度从度数转换为弧度 Syntax:angleInRadians = degtorad(angleIn ...
- matlab中数据格式转换
最新文章
- MyBitis(iBitis)系列随笔之六:mybitis与spring集成
- 关于C/C++的trigraphs和Digraphs
- vue 动态修改路由参数
- java.io.IOException 权限不够
- 电机的入门之路系列3--直流电机的工作原理
- sublime java文件乱码问题_Sublime Text 打开Java文档中文乱码的解决方案
- [转]PHP 超全局变量详解 $GLOBALS $_SERVER $_GET $_POST $_COOKIE $_FILES $_ENV $_REQUEST $_SE
- linux分析目录内存,在 Linux x86-64 模式下分析内存映射流程
- coco 数据集_Tensorflow对COCO目标检测数据预处理
- usb耳机android,USB 耳机:配件规范 | Android 开源项目 | Android Open Source Project...
- 量子计算机拓扑超导新状态,陈根:特殊超导体,有助于量子计算机运行
- Linux入门相关基础知识
- 基于Docker的开发模式驱动持续集成落地实施
- mysql自动判断索引机制_Mysql优化之索引实现原理
- 开两个服务内存溢出_详解JVM内存区域
- Java NIO深入(Buffer)-我们到底能走多远系列(18)
- atitit. 日志系统的原则and设计and最佳实践(1)-----原理理论总结.
- Java原生实现多线程下载Tim
- ps 蒙版抠图更换背景色或背景图片
- pytorch optim灵活传参