MATLAB常⽤数据类型的转换
⼀直以来,在使⽤MATLAB进⾏运算的过程中,经常会⽤到对图像的各种处理,因此需要对图像进⾏数据转换,因此对经常⽤到的转换进⾏整理,⽅便查看。
1、uint8转化为double⽤来⽅便图像的运算:
double函数只是将读⼊图像的uint8数据转换为double类型,⼀般不使⽤。
常⽤的是im2double函数,将uint8图像转为double类型,范围为0-1,如果是255的图像,那么255转为1,0还是0,中间的做相应改变。
MATLAB中读⼊图像的数据类型是uint8,⽽在矩阵中使⽤的数据类型是double
因此
matlab二进制字符串转数组I2=im2double(I1) :把图像数组I1转换成double精度类型;如果不转换,在对uint8进⾏加减时会产⽣溢出。
默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;
matlab还⽀持⽆符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。
im2double():将图象数组转换成double精度类型
im2uint8():将图象数组转换成unit8类型
im2uint16():将图象数组转换成unit16类型
2、uint8和im2uint8的区别
在数据类型转换时候uint8和im2uint8的区别,uint8的操作仅仅是将⼀个double类型的⼩数点后⾯的部分去掉;
但是im2uint8是将输⼊中所有⼩于0的数设置为0,⽽将输⼊中所有⼤于1的数值设置为255,再将所有其他值乘以255。
图像数据在计算前需要转换为double,以保证精度;
很多矩阵数据也都是double的,要想显⽰其,必须先转换为图像的标准数据格式.
如果转换前的数据符合图像数据标准(⽐如如果是double则要位于0~1之间),那么可以直接使⽤im2uint8
如果转换前的数据分布不合规律,则使⽤uint8,将其⾃动切割⾄0~255(超过255的按255),因此最好使⽤mat2gray,将⼀个矩阵转化为灰度图像的数据格式(double)
3、double类型图像的显⽰
图像数据在进⾏计算前要转化为double类型的,这样可以保证图像数据运算的精度。
很多矩阵的很多矩阵数据也都是double的,要想显⽰它,必须先转换为图像的标准数据格式。
如果直接运⾏imshow(I),我们会发现显⽰的是⼀个⽩⾊的图像。
这是因为imshow()显⽰图像时对double型是认为在0~1范围内,即⼤于1时都是显⽰为⽩⾊,⽽imshow显⽰uint8型时是0~255范围。
⽽经过运算的范围在0-255之间的double型数据就被不正常得显⽰为⽩⾊图像了。
具体⽅法有:
imshow(I/256); ----------将图像矩阵转化到0-1之间
imshow(I,[]); -----------⾃动调整数据的范围以便于显⽰(注意这⾥,必须是灰度图,负责不⾏)
imshow(uint8(I));
imshow(mat2gray(I));%
上⾯的mat2gray是将最终获得的矩阵转化为灰度图像。常⽤的为:
A = im2uint8(mat2gray(result))
这样就将result矩阵转化为uint8类型的图像。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论