matlab编程:为什么要对图像使用double函数,以及使用double函数之后imshow显示图像为什么只有一张白色图片?

**

matlab编程:为什么要对图像使用double函数,以及使用double函数之后imshow显示图像为什么只有一张白色图片?

**

一、matlab中读取图片之后,为什么要转换为double类型?
matlab中读取图片后保存的数据是uint8类型,但图像矩阵运算时的数据类型是double类型。这么做一是为了保证精度,二是如果不转换,在对uint8进行加减时会溢出。做矩阵运算时,uint8类型的数组间可以相互运算,结果仍是uint8类型的;uint8类型数组不能和double型数组作运算。
转换为double类型的两个函数:
①im2double()函数:参数为unit8型数组时,转化结果矩阵元素取值位于[0,1]。
如果im2double()的参数是double型时,直接输出参数本身,不做任何数值类型和数值大小的处理。
②double()函数:参数为unit8型数组时,转化结果矩阵元素取值位于(0,255)。
原256*256图像,uint8类型
图1:原256*256图像部分数据,uint8类型
在这里插入图片描述
图2:用im2double函数处理之后的double图像部分数据
在这里插入图片描述
图3:用double函数处理之后的double图像部分数据

二、图片转换为double类型之后,用imshow显示为什么是一张白色图像?
这种情况,应该是用double函数处理后,再使用imshow函数显示造成的错误结果。
matlab默认的double类型图片数据是位于(0,1),uint8型图片数组是位于(0,255)。imshow()显示图像时,①对于double型数据,认为其范围是[0,1],对于数组中大于1的元素,会将其归为1,显示为白色。②对于uint8型数据的情况,显示的范围是0-255。所以,对于0~255范围的double图像数组,要想正常显示,要么除以255进行归一化处理,要么将其转换成uint8型图像数组显示。
转换为uint8的两个函数:
①im2uint8():要求像素值必须在0-1范围内:
如果矩阵数据图像是double类型(0-1之间)可直接im2uint8,这样不仅完成数据类型转换,而且将0-1之间映射为了0-255之间的数据。如果图像矩阵数据是double类型的0-255,直接im2uint8转换的话,matlab会将大于1的数据都转换为255,0-1之间的数据才会映射到0~255之间整型的数据,这个时候需要使用uint8函数。
②uint8():像素值可以是0-255。

在这里插入图片描述
图4:范围为0-255double图像用im2uint8函数转化结果(错误)
在这里插入图片描述
图5:范围为0-255double图像用uint8函数转化结果(正确)

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值