其他MATLAB数字图像处理的相关内容
MATLAB求图像的均值、中值、众数、方差、协方差、相关系数


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

  • 前言
  • 一、图像显示问题说明
    • 1.说明
    • 2.案例展示
  • 二、图像类型转换
  • 三、自定义显示函数
    • 1.函数代码
    • 2.函数调用
  • 总结

前言

在图像处理中,我们需要显示图像来查看效果,所以我对我在显示图像时遇见的一些问题进行了总结。


提示:以下是本篇文章正文内容

一、图像显示问题说明

1.说明

在我对图像进行线性拉伸时,发现将一些图像拉伸到0~255后无法正常显示,通过阅读相关文章终于明白了是什么原因。

MATLAB储存图像时一般会使用 uint8类型 (1个字节无符号整数,值在0~255之间),使用uint8类型可以起到节省存储空间的作用,但是由于uint8类型在0-255中间,所以在进行算术运算时很容易溢出,我们在进行算数运算前需要把uint8类型转换为double类型。
有一些图像不是以uint8类型储存的,而是直接以double类型储存的,或者我们为了进行运算把uint8类型转换为double类型还没有转换回去,这时如果我们想用 imshow() 函数来显示图像就会有一些要求。

当我们使用imshow()函数来显示图像时,如果这个时候的图像矩阵的数据类型是double类型。如果直接运行imshow(img),这时显示的图像可能是一个纯白色的图像。
这是因为imshow()显示图像时,默认double类型的值都在0-1范围内,所以这个时候大于1时都会显示为白色,imshow()显示uint8类型时是0-255范围
如果我们想要double型数据的图像正常显示:①需要把他的范围拉伸到0-1,②或者将范围在0-255之间的double类型数据转换为uint8类型数据,就可以看到正常显示的数据了。

2.案例展示

先读入下面文件

a=imread('原图像.jpg');

可以看到这张图像是以uint8类型储存的

这时候我们直接使用imshow()函数,图像可以正常显示

这时候我们读入另外一张图像(由于过大无法上传)

b=imread('南京.jpg');


可以发现数据的范围在0-1之间,这时我们调用imshow()函数,图也像可以正常显示。


这时候我们把0-1的图像拉伸到0-255(使用的函数是自己写的后面会发出来),然后再使用imshow函数可以发现,图像显示为全白色。

c=xianxinglashen(b,0,255);%将b的范围拉伸到0-255
imshow(c);


显示图像,可以发现图像为纯白色


二、图像类型转换

我们通过使用MATLAB自带的函数就可以完成图像类型的转换

a = imread('原图像.jpg'); % 读入unit8类型(值在0~255之间)的数据
b  = double(a)/255;       % 将uint8类型转换成double类型,并且把范围限制在0~1之间
c = im2double(a);         % 直接把图像转换成double类型并且值在0~1之间,相当用一个函数完成上面的操作

使用double(a)是最普通的数据类型转换,将无符号整型转换为双精度浮点型double,不会改变数据值的大小,原本数据是0-255之间,转化后还是0-255。
   使用im2double(img)则除了将uint8转换到double类型外,还会把数据大小从0-255区间映射到0-1区间

其他转换函数

uint8(a);    % 将数据类型转成uint8类型
im2double(); % 将图像数组转换成double精度类型
im2uint8();  % 将图像数组转换成unit8类型
im2uint16(); % 将图像数组转换成unit16类型

同样的,uint8()函数是最普通的数据类型转换,不会改变数据值的大小,会对数字进行自动取整,单独使用时需要注意,double的值是否是0-255;
   而如果矩阵数据图像是double类型(并且范围0-1之间),这是使用im2uint8(),不仅可以完成数据类型转换,还将0-1之间的数据映射到0-255之间的数据。
   但是这是又有新的问题,如果此时图像矩阵数据是double类型且范围在0-255之间,这是使用im2uint8函数转换,matlab会将大于1的数据都转换为255,所以这时应该使用uint8()函数


三、自定义显示函数

为了适应多种类型图像的显示,我自己写了一个自定义的展示函数来解决问题。

1.函数代码

这里我选择把所有值转换为double类型并且归一化。(如果想处理多个波段根据下面的函数改写即可)

代码如下(示例):

function [ x ] = show1( a )
%a为单波段图像的图像矩阵a=double(a);b=a(:);[r,c]=size(a);ma=max(b);mi=min(b);for i=1:rfor j=1:ca(i,j)=a(i,j)/(ma-mi);endendx=a;imshow(x);
end

2.函数调用

代码如下(示例):

b=imread('南京.jpg');
c=xianxinglashen(b,0,255);
show1(c);

图像可以正常显示了


总结

文章中的内容时在完成作业过程中通过各种途径学习到的,还存在很多问题和不足,希望能够逐步完善。

MATLAB图像imshow函数显示问题、uint8与double类型转换、自定义图像显示函数相关推荐

  1. mysql自定义函数重载_DBLE 2.18.10.1自定义路由函数开发指引

    工作原理 1.1 函数的加载 路由函数的加载发生在dble启动或重载时. 函数加载流程 dble读取rule.xml时,根据用户配置的标签的class属性 dble通过Java的反射机制,从$DBLE ...

  2. matlab 图像输入和显示函数

    http://blog.163.com/yang1028jia@126/blog/static/6691172720146674622821/ MatLab matlab编程中涉及到图象矩阵的数据类型 ...

  3. 【Matlab 图像】同时显示两个视频

    使用Matlab同时显示两个视频 通过枚举图片的形式 v1 = VideoReader('video1.mp4') v2 = VideoReader('video2.mp4')i1 = 0; i2 = ...

  4. Matlab——图像缩放(插值法)

    实验内容: 用双线性内插法实现位深度为8的灰度图像的缩放. 思路: 输入原图像以及缩放后图像的像素要求(宽度*高度),处理后输出新图像. 我是用matlab来实现scale(input_img,sca ...

  5. 类的使用经典案例使用类的成员函数显示时间、找出元素的最大值【C++面向对象编程】

    文章目录 一.普通函数显示时间 二.使用类的成员函数显示时间 三.找出元素的最大值(使用类的成员函数) 一.普通函数显示时间 #include <iostream> using names ...

  6. java 自定义函数的调用_Java/Android中的函数调用回调函数自定义回调函数

    在做Android自定义控件时遇到要自定义回调函数的问题,想想自己还暂时没有那么精深的技术,赶紧返过头回来再重新研究Java中回调函数的问题.然而不幸的是,网上太多杂乱的帖子和博客都是转来转去,而且都 ...

  7. 案例展示自定义C函数的实现过程

    摘要:用户在使用数据库过程中,受限于内置函数的功能,部分业务不易实现时,可以使用自定义C函数实现特殊功能.本文通过两个示例展示自定义C函数的实现过程. 前言 用户在使用数据库过程中,常常受限于内置函数 ...

  8. 小C实例也有大梦想——自定义strlen函数

    在C语言中,测一个字符串的大小可以用strlen函数来实现,今天写一个自定义strlen函数: 很多人说,这还不简单? int my_strlen(const char* str) {if (str ...

  9. 05黑马QT笔记之自定义槽函数

    05黑马QT笔记之自定义槽函数 1 自定义槽函数其实不难,没什么好说的,注意以下几点便可. 自定义参函数注意事项(Qt5): * 1)自定义槽函数可以是类成员函数(用得最多).全局普通函数.静态函数. ...

最新文章

  1. DeepI2P:基于深度分类的图像对点云配准
  2. minui 向div放html,c# – 如何添加css类到html通用控件div?
  3. 二阶偏微分方程组 龙格库塔法_深度科普---电磁波(三):无激励下的真空中的Maxwell方程组的解...
  4. Java - 自己动手之在线书店(2)
  5. 【python】Python的基本数据类型之数字类型与字符串类型
  6. html调后台接口_接口测试平台代码实现62: 多接口用例2
  7. leetcode求众数
  8. fadein和fadeto_jQuery fadeIn,fadeOut,fadeTo
  9. Anaconda的安装和环境使用
  10. 408计算机考试科目英语数学,关于计算机考研408的那些事儿
  11. 计算机系统时间错了,电脑时间同步出错怎么办
  12. 做运营活动的几点心得
  13. maya检查模型重合点脚本
  14. APP设计:(一)app界面常用设计规范
  15. 墨刀和axure的区别
  16. 当地特色旅游系统 计算机毕业设计 微信小程序开发
  17. 音频/视频标签的使用
  18. 【钛媒体】人人不死,只是凋零
  19. C/C++如何将一个数字三位三位加逗号
  20. 一种清淤机器人分拣识别系统的C/Python语言实现

热门文章

  1. SEO,搜索引擎优化原理方法等整体把握
  2. SAP已经审批的采购订单可修改
  3. vs代码自动补全快捷键html,VSCode 自动补全(智能提示)
  4. Qt TCP通信(QTcpSocket)
  5. 如何选择适合企业的进销存软件
  6. 请问公立医院,药费缴纳后,如何开发票
  7. ERROR: Exception when publishing, exception message [Failed to connect and initialize SSH connection
  8. CoCreateInstance
  9. 连续12年霸榜Gartner魔力象限,亚马逊云科技财报解析
  10. 全国计算机一级电子表格教程