码迷,mamicode.com
首页 > 其他好文 > 详细

matlab中double、im2double、mat2gray区别

时间:2015-11-06 06:45:39      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

 

转载:http://blog.sina.com.cn/s/blog_6c41e2f30101559d.html

 

 

****************假设某图像数据A(uint8格式)**********************

A =

  235  200  89  20

>> double(A)                 %返回与原矩阵数值相同但类型为double的矩阵;

ans =

   235   200 89   20

>> im2double(A)              
%返回矩阵类型:double;数值范围[0 1] ,0对应uint8中的0;1对应uint8中的255;

ans =

    0.9216    0.7843   0.3490    0.0784

>> mat2gray(A)                %对原矩阵归一化

ans =

    1.0000    0.8372   0.3209      0

****************假设矩阵A为一般二维数组,非图像数据(double格式)**********************

A =

   235   200    89    20 

>> double(A)

ans =

   235   200   89    20

>> im2double(A)

ans =

   235   200   89    20

>> mat2gray(A)

ans =

    1.0000    0.8372    0.3209      0 

**********************小结***************************

im2double:如果输入类型是uint8、unit16 、logical,则按照0-->>0,255-->>1,将其值按比例处理成0~1之间的double数值;如果输入类型是double,输出没有处理;

double:返回数值与输入相同的double类型矩阵;

mat2gray:对输入进行归一化处理,最小值-->>0;最大值-->>1,输出类型为double。

在实际的对图像处理过程中,由于我们读入图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据。

 

 

 

为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。

 

imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。

 

 

 

因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,

 

I2=im2double(I1)  %把图像I1转换成double精度类型 (假设图形矩阵范围0~255)

 

或者

 

I64=double(I8)/255;   %uint转换成double

 

如果不转换,计算会产生溢出。

 

 

 

经过计算后,I2已经是double型。如果现在想imshow显示图像结果,就需要再转换成uint8格式。如果矩阵复合数据图像标准(0~1之间),

 

I3=im2uint8(I2)  %把矩阵I2转换成uint8类型

 

如果超出0~1范围,就要用uint8()

 

I8=uint8(round(I64*255));  %double转换成uint8    

 

或者mat2gray()

 

I3=mat2gray(I2)  &把矩阵转化为灰度图像格式double

 

 

 

最后可以知道,im2uint8,im2double和uint8,double是有区别的。

 

matlab中double、im2double、mat2gray区别

标签:

原文地址:http://www.cnblogs.com/Matrix420/p/4941391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!