前言

所谓“空间域”指的是图像平面本身,这类方法是对图像像素直接处理为基础的。图像的灰度变换处理是图像增强处理技术的一种非常基础的空间域处理方法。灰度变换主要针对独立的像素点进行处理,通过改变原始图像数据所占据的灰度范围而使图像在视觉上得到良好的改变。

文章目录

1 灰度变换函数

1.1 imadjust函数

imadjust函数是针对灰度图像进行灰度变换的基本图像处理工具箱函数,一般的语法格式如下:g=imadjust(f,[low_in hign_in],[low_out high_out],gamma)

此函数将f的灰度值映射到g中的新值,也就是将low_in与high_in之间的值映射到low_out与high_out之间的值。low_in以下与high_in以上的值可以被截去。也就是将low_in以下的值映射为low_out;将high_in以上的值映射为high_out。

例1:图1是一副米粒图像原图,图2是负片图像

g=imread('rice.png')

imshow(g)

g1=imadjust(g,[0 1],[1 0])

figure,imshow(g1)

获得照片负片图像的这一过程对于增强在一大片主要的黑色区域中嵌入白色及灰色细节是非常有用的。

1.2 对数及对比度扩展变换

对数及对比度扩展是动态范围处理的基本工具。对数变换通过以下表达式实现:

g=c*log(1+(f))

其中,c是常数,f是浮点数。对数变换的一项主要应用是压缩动态范围,假设动态范围是10610^6106,之后被将至14(也就是log(10610^6106)=13.8),这样也更容易处理。

&emsp ;当执行对数变换时,通常期望得到的是将压缩值返回至显示的全域。对于8比特来说,在MATLAB中最简单的方法是:

gs=im2uint(mat2gray(g))

使用mat2gary将值限定在[0,1]范围内,使用im2uint8将值限定在[0,255]范围内,把图像转换为uint8类。

例2:利用对数变换减小动态范围

a=imread('pout.tif')

imshow(a)

g=im2uint8(mat2gray(log(1+double(a))))

figure,imshow(g)

图3是原图,图4是经过对数变换后的图像,可见图4相对于原始图像在视觉方面的改善效果是较明显的。

2 直方图均衡化

2.1 生成图像的直方图

以从图像灰度直方图中提取信息为基础的灰度变换函数在增强、压缩、分割、描述等方面的图像处理中起重要作用,有时利用归一化的直方图是必要的。

工具箱中用于处理图像直方图的核心函数是imhist,基本语法如下:h=imhist(f,b)

其中,f为输入图像,h为直方图,b是用来形成直方图的“统计堆栈”的数目,如果我们处理一幅uint8类的图像且设b=2,然后灰度范围会被分成两部分:0至127和128至255。所得到的直方图将有两个值:h(1)等于图像在[0,127]间隔内的像素数,h(2)等于图像在[128,255]间隔内的像素数。

2.2 histeq函数

假设灰度级为归一化在[0,1]范围内的连续量,让p(rrr)代表一副给定图像的灰度级的概率密度函数。假设我们对输入灰度进行下列变换,得到处理之后的灰度级s:

s=T(r)=∫0rp(w)dws=T(r)=\int_{0}^{r}p(w)dws=T(r)=∫0r​p(w)dw

式中的w是积分虚变量,前面的变换生成一幅图像,这幅图像的灰度级是等概率的。此外,灰度覆盖了整个[0,1]范围。

直方图均衡化由工具箱中的histeq函数实现,语法如下:

g=histeq(f,nlev)

其中,f为输入图像,nlev为输出图像设定的灰度级数。若nlev与L(输入图像中可能灰度级的总数)相等,则histeq直接执行变换函数

例3:直方图均衡化

a=imread('pout.tif')

imshow(a)

figure,imhist(a)

ylim('auto')

g=histeq(a,256)

figure,imhist(g)

ylim('auto')

figure,imshow(g)

上图是原图与经过直方图均衡化之后的结果,在平均灰度及对比度方面的改进是非常明显的。另外,直方图如下所示:

对比度的增加源于直方图在整个灰度级以上的显著扩展。灰度级的增加源于整个灰度级上的显著扩展,灰度级的增加源于均衡化之后的图像直方图中灰度级平均值高于原始值。

2.3. adapthisteq函数

这个工具箱函数执行对比度受限的自适应直方图均衡,和histeq不同的是,此方法用直方图规定化方法处理图像的小区域组成,然后用双线性内插将相邻小片组合起来以消除人工引入的边界效应。特别是可以限制均匀亮度区域的对比度,以免放大噪声。adapthisteq函数的语法如下:g=adapthisteq(f,param1,val1,param2,val2,…)

其中,f是输入图像,g是输出图像,param/val是表中所示内容。

参数

NumTiles

根据行和列[r c]指定小片数的正整数的两元素向量,r和c至少是2,小片总数是r*c

ClipLimit

范围[0 1]内的标量,指定了对比度增强限制,值越高,对比度越高,默认值是0.01

NBins

正整数标量,为建立对比度增强变换而使用的直方图指定堆栈数目

Range

指定输出图像数据范围的字符串

Distribution

字符串,用于指定图像小片所需的直方图形状

例4:adapthisteq运用

g=imread('moon.tif')

imshow(g)

g1=adapthisteq(g)

figure,imshow(g1)

g2=adapthisteq(g,'NumTiles',[25 25])

figure,imshow(g2)

g3=adapthisteq(g,'NumTiles',[25 25],'ClipLimit',0.03)

figure,imshow(g3)

上图是图像原图与使用adapthisteq默认值之后的结果,结果显示的细节略有增加,但是图像的重要部分仍然较暗

上图是加入小片大小增加到[]25 25]后的结果以及加入ClipLimit=0.03后的结果,这两幅图与前两幅图相比,在细节方面明显增强。这就是局部增强方法以及全局增强方法的区别。

标签:函数,灰度级,灰度变换,imshow,直方图,MATLAB,图像,对比度

来源: https://blog.csdn.net/seven233/article/details/105248603

matlab转全域灰度图,MATLAB灰度变换相关推荐

  1. matlab彩色转灰度图代码,彩色图转灰度图 matlab 实现代码

    (一):彩色图像转灰度图 1.设计任务 1) 读入彩色和灰度图像并显示: 2) 对彩色图像转化为灰度图像并显示: 3) 比较两种方法的效果. 2.设计目的 1) 掌握彩色图转灰度图的基本原理与方法: ...

  2. matlab如果图片格式灰度矩阵,matlab矩阵生成灰度图

    Q4:matlab 如何将彩图转成灰度图 >> I=imread(D:\Lena.jpg); >> x=rgb2gray(I); >> figure(1); > ...

  3. matlab如何画波特图,matlab画波特图

    Matlab 中 Bode 图的绘制技巧 学术收藏 2010-06-04 21:21:48 阅读 54 评论 0 字号:大中小 订阅 我们经常会遇到使用 Matlab 画伯德图的情况,可能我们我们都. ...

  4. matlab将彩图转化成灰度图,matlab 如何将彩图转成灰度图

    >>I=imread('D:\Lena.jpg');>>x=rgb2gray(I);>>figure(1);>> subplot(121);>&g ...

  5. matlab奈馈斯图,matlab关于控制的设计单位负反馈的校正

    任务书 一.设计目的 1. 掌握控制系统的设计与校正方法.步骤. 2. 对系统BODE 图和根轨迹图的绘制与分析. 3.掌握利用MATLAB 对控制理论内容进行分析和研究的技能. 4.提高分析问题解决 ...

  6. matlab怎么求imf图,MATLAB中提取EMD分解后的每个IMF图像,并导出每个IMF数据

    题目: MATLAB中提取EMD分解后的每个IMF图像,并导出每个IMF数据 EMD分解程序我就不给了,网上都是一样的. 例: M = length(imf); N = length(x); c = ...

  7. matlab画动物轮廓图,MATLAB一维插值的应用实例—画左右手的轮廓图

    问题提出 画你自己的手的形状,在MATLAB中输入 figure('position',get(0,'screensize')) axes('position',[0 0 1 1]) [x,y]=gi ...

  8. matlab scope 多个图,matlab scope论文画图

    相信大家经常会遇到这种尴尬的情况,我们在写论文的时候需要用到一些波形结果的图片,但是simulink scope模块的结果背景界面是黑色的,且不容易对波形进行编辑.因此,哥给大家介绍几种方法,得到符合 ...

  9. matlab 状态空间的波特图,MATLAB:对于状态空间方程的系统辨识

    本文介绍了如何利用MATLAB辨识状态空间方程中的未知参数. 假设我们的被控系统的表达如下: 我们想要通过实验数据辨识出参数K1和K2​,方法如下: 第一步,采集实验数据. 需要的数据包括系统一段时间 ...

最新文章

  1. jQuery中的 $.ajax的一些方法
  2. 接口转发和重定向区别(一)
  3. python是一门什么课程-从无到有用Python创造一门属于自己的编程语言1
  4. 浅谈scatter-gather DMA
  5. sql server修改索引名称_索引基本知识和索引优化
  6. 关于Docker COPY指令只能使用相对路径的说明
  7. 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)
  8. WCF和webservice的区别
  9. 大家一起做训练 第一场 A Next Test
  10. HowToDoInJava Spring 教程·翻译完成
  11. 在C#中嵌入Flash对象时遇到未能导入activex 控件的问题
  12. linux添加sshkey,使用SSH密钥对连接Linux实例
  13. wireshark 分析过滤数据
  14. pycharm怎么做html网页_html下拉菜单怎么做
  15. vue入门--简单嵌套路由的一个路径小问题
  16. list循环添加数据_笔记 | 自学Python 06:数据类型之列表
  17. CSS动画transform、transition和animation的区别
  18. C++11 字符串编码转换
  19. # Maven错误Error executing Maven
  20. 无盘服务器快慢取决于什么,cpu运行速度的快慢取决于什么

热门文章

  1. 查看如何轻松升级到Webpack
  2. 全球及中国膨胀型热塑性聚氨酯行业资潜力分析及运营规划建议报告2021-2027年版
  3. 参加Oracle认证的两种考试方式
  4. duilib 尝试解决透明窗体WebBroswer控件无法显示的问题
  5. OpenGL:使用顶点数组法绘制正六面体
  6. python字符串分割
  7. matlab小白入门学习(一)画三维图和二维动图
  8. 【DSP】TMS320F28335的SCI模块
  9. CAD批量打印软件破解手记(E01著)
  10. 三菱plc实现电机正反转星型转角型降压启动