1. 图像数据格式

double(64位):matlab中数值一般采用double型存储和运算。
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);    % 把图像转换成double精度类型(0~1)
I2  = double(img)/255;   % uint8转换成double,作用同im2double

补充:
(1) im2double( )和double( )的区别。double( img)就是简单的数据类型转换,将无符号整型转换为双精度浮点型double,但是数据大小没有变化,原本数据是0-255之间,转化后还是0-255。例如原来是255,那么转换后为255.0,小数位0个数是由double数据长度决定,实际数据大小还是255,只不过这个255已经是double类型空间存储了,再增加不会发生溢出情况。而im2double(img)则不仅仅是将uint8转换到double类型,而且把数据大小从0-255映射到0-1区间。
(2)对double型数据进行im2double处理没有任何作用,即imdouble不会对double类型数据0-255映射到区间0-1

img = imread('test.jpg'); % 读入是unit8型(0~255)数据
I1  = im2double(img);    % 把图像转换成double精度类型(0~1)
I2  = double(img)/255;   % uint8转换成double,作用同im2double:

个人体会:在MATLAB中经过部分处理得到double型数据(0-1,如果灰度值超过1可能需要进行归一化操作),如果需要保存但是未来可能还有进一步的图像处理操作,建议将其以.mat矩阵形式保存而不是uint8,否则会大大损失图像精度(如果保存为uint8,下一次处理时有需要从uint8转换为double,在此过程中抹去了灰度值小数的有效数据位)。

3. matlab图像显示imshow类型问题

(1)imshow()显示double型
如果直接对double之间的数据矩阵I运行imshow(I),我们会发现有时候显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0-1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0-255范围。所以对double类型的图像显示的时候,要归一化到0-1之间。
(2)imshow()显示uint8型
对double类型的图像显示的时候,除了归一化到0-1之间,也可以将double类型的0-255数据转为uint8类型。

imshow(I/255);    % 将图像矩阵转化到0-1之间
imshow(I,[]);     % 自动调整数据的范围以便于显示
inshow(uint8(I)); % 转成uint8

补充:imshow()用法:imshow(I,[low high])
用指定的灰度范围 [low high]显示灰度图像I。显示结果,图像中灰度值等于或低于low的都将用黑色显示,而灰度值大于等于high的都显示为白色,介于low和high之间的用其灰度级的默认值的中间色调显示。如果你用了一个空矩阵([])来代替 [low high], imshow 函数将使用 [min(I(:))max(I(:))]作为第二个参数。

图像数据格式uint8与double以及图像类型转换相关推荐

  1. MATLAB图像imshow函数显示问题、uint8与double类型转换、自定义图像显示函数

    其他MATLAB数字图像处理的相关内容 MATLAB求图像的均值.中值.众数.方差.协方差.相关系数 MATLAB图像imshow函数显示问题.uint8与double类型转换.自定义图像显示函数 前 ...

  2. matlab图像类型转换以及uint8、double、im2double、im2uint8和mat2gray等说明

    1. matlab图像保存说明 matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点doubl ...

  3. matlab uint8转uint16,MATLAB图像uint8,uint16,double, rgb转灰度解释

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

  4. ffmpeg学习十三:图像数据格式的转换与图像的缩放

    一.实现图像数据格式转换与图像缩放的三个重要函数 ffmpeg实现图像数据格式的转换以及图片的缩放的功能,主要使用swscale.h中的三个函数: sws_getContext() sws_scale ...

  5. Matlab图像数据类型unit8与double

    一.数据类型 uint16 :无符号16bit整数, unit8:无符号8bit整数, int8:有符号8bit整数. double:有符号64bit浮点数.(8bit即一个字节) 二.图像数据类型 ...

  6. 利用rosbag命令将compressed图像数据格式转为raw

    利用rosbag命令将compressed图像数据格式转为raw 1 kalibr使用compressed图像格式 2 compressed转为raw 3 使用image_view查看compress ...

  7. 图像数据格式基础知识

    JPEG文件格式简单分析 作者:小爽 摘要: 这篇文章大体上介绍了JPEG文件的结构信息以及它的压缩算法和编码方式.使读者能够对JPEG文件格式有大体上的了解.为读者进一步进行学习JPEG文件压缩做好 ...

  8. 【图像融合】基于小波变换的图像融合

    小波变换   传统的信号理论,是建立在Fourier分析基础上的,而Fourier变换作为一种全局性的变化,其有一定的局限性,如不具备局部化分析能力.不能分析非平稳信号等.在实际应用中人们开始对Fou ...

  9. 【matlab数字图像处理】 uint8和double类型

    一个星期没有写博客了,写几个最近弄得晕头转向的代码 为了理解数字图像当中的uint8和double类型问题,起初费了不少劲,现在看很容易理解了. 大体上讲: double是这样的: uint8是这样的 ...

最新文章

  1. 谷歌发布开源Dopamine 2.0
  2. paddle_ocr2.0入门踩坑
  3. dockerfile centos+jdk+时区设置
  4. Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
  5. 应用程序_构建应用程序12 条参考准则
  6. 计算与推断思维 一、数据科学
  7. 一文学会 SSH 服务!
  8. 97、锐捷交换机常用配置命令汇总
  9. qq音乐for linux,[Linux] QQ音乐官方上线 For Linux V1.0.5-1 [2020.12.2]
  10. 这些百度搜索技巧,你知道吗?
  11. Linux 下的IP/子网计算器:ipcalc
  12. linux下刻录光盘读取不了_如何在Linux下刻录数据光盘
  13. 基于Java的GUI界面+SQL Server数据库课程信息管理系统
  14. NOIP前的刷题记录
  15. 网站字体颜色大小php代码,html字体颜色的设置方法
  16. 微信小程序Nginx环境配置
  17. Linux 下创建新用户并且添加为root组用户
  18. 交换机基础知识和VLAN概述
  19. 计算机视觉:摄像机标定(循序渐进理解到应用)
  20. IdCardGenerator生成工具

热门文章

  1. cisco 3560 route-map
  2. 图说微积分(四)三角函数
  3. office和visio不兼容的终极办法(亲测可用)
  4. windows 使用 sg3_utils-1.42_mw64exe
  5. 摄像机传输到计算机,如何将摄像机文件导入计算机 - Windows 10
  6. 每日一篇BlackBerry10开发——序
  7. debugger调试工具配置
  8. IBM 国际商业机器公司
  9. SN与TI,LS、HC与HCT的区别
  10. 如何为linux kernel贡献代码