阅读 75

double类型的数据格式,将图像转换为8位通道

1 .图像数据格式double(64位):matlab的数值一般采用双精度存储和运算。

uint8(8位无符号整数):为了节省存储空间,matlab为图像提供了特殊的数据类型。 imread将灰度图像存储在8比特矩阵中,在RGB图像的情况下存储在8比特的RGB矩阵中,所以matlab读取的图像的数据是uint8.

2 .图像类型转换器matlab读取的图像的数据是uint8,但是在matlab中,数值一般以double型(64位)存储并计算。 所以,首先要把图像转换成double格式的才能运算,有以下区别。

img=imread(test.jpg ); %读取为unit8型(0~255 )数据I1=im2double ) img ); %将图像转换为双精度类型(0~1) I2=双精度(img )/255; % uint8转换为double,起到与im2double相同的作用。

(1) im2double ) )和double ) )的差异。 double(img )是一种简单的数据类型转换,它将无符号整数类型转换为双精度浮点型double,但数据大小不变。 原本数据在0-255之间,转换后仍保持0-255。 例如,如果为255,则转换后为255.0。 小数点后0位的个数由double数据长度决定,实际的数据大小仍然为255。 但是,由于该255已经存储在双精度空间中,因此即使再增加也不会发生溢出。 另一方面,im2double(img )不仅将uint8转换为double类型,还将数据大小映射到0-255到0-1区间。

)2)对双精度型数据进行im 2双精度处理也无济于事。 即,imdouble对于double型数据0-255不映射到区间0-1

img=imread(test.jpg ); %读取为unit8型(0~255 )数据I1=im2double ) img ); %将图像转换为双精度类型(0~1) I2=双精度(img )/255; % uint8转换为double,起到与im2double相同的作用。 我个人认为,在MATLAB中经过部分处理得到的双精度型数据(0-1,灰度值超过1可能需要归一化操作),需要保存,但将来可能有更多的图像处理操作,请不要使用uint8,而是. MATLAB 否则,图像的精度会严重受损。 (如果保存为uint8,则在下一个处理中必须从uint8转换为double,在此过程中会删除灰度值小数的有效数据位。

3. matlab图像显示imshow类型问题(1)imshow()显示double型

如果直接对双精度数据矩阵I执行imshow(I ),可能会显示白色图像。 这是因为imshow )显示图像时,对于双精度型,可以认为在0-1的范围内,也就是说大于1的情况下全部显示为白色,imshow显示uint8型时在0-255的范围内。 所以显示双精度型的图像时,在0-1之间进行标准化。

(2)imshow()显示uint8型

显示双精度类型的图像时,除了标准化为0-1之间外,还可以将双精度类型的0-255数据转换为uint8类型。

imshow(I/255; 将%图像矩阵转换为0-1之间的imshow(I,[] ); 自动调整数据范围以显示% in show (uint8) I ); %转生uint8补充: imshow ()用法:imshow(I,[low high])

在指定的灰度范围[low high]中显示灰度图像I。 结果,图像中灰度值为low以下的显示为黑色,灰度值为high以上的显示为白色,以介于low和high之间的灰度级默认值的中间色调显示。 如果使用空矩阵[ ]而不是[低],则imshow函数使用[min(I (() () ) )作为第二个参数() )。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐