C#数字图像处理算法学习笔记(二)--点运算与直方图

在数字图像处理中,点运算是一种简单而重要的技术。点运算只是根据对象的像素的输入灰度值来决定像素的输出灰度值的图像处理运算。它有时也被称为对比度增强、对比度拉伸或灰度变换。点运算没有改变图像的空间运算,它是按照一定的方式改变了图像的灰度直方图。

灰度直方图是一种最简单且最有用的工具,它概括了一幅图像的灰度级内容。

灰度直方图的定义:

灰度直方图是灰度的函数,描述的是图像中的具有该灰度级的像素个数。如果用直角坐标系来表示,则它的横坐标是灰度级,纵坐标是该灰度级出现的概率(像素的个数)。

灰度直方图的分布函数为:h(k)=nk;其中k是指第k个灰度级,nk是灰度级为rk的像素总和。

线性点运算:灰度图像的点运算可分为线性点运算和非线性点运算。

线性点运算定义:

线性点运算就是输出灰度级与输入灰度级呈线性关系的点运算。在这种情况下,灰度级变换函数为:g(x,y)=pf(x,y)+L

其中,f(x,y)为输入图像在点(x,y)的灰度值,g(x,y)为相应的输出点的灰度值。显然,如果p=1和L=0,g(x,y)就是f(x,y)的复制;如果P<1,输出图像的对比度将增大;如果P>1,则对比度将减小。

全等级直方图灰度拉伸:灰度拉伸也属于线性点运算的一种

灰度拉伸的定义:

如果一幅图像的灰度值分布在全等级灰度范围内,即在0-255之间,那么它更容易被区别确认出来。灰度拉伸也称为对比度拉伸,是一种简单的线性点运算。它扩展图像的直方图,使其充满整个灰度级范围内。

设f(x,y)为输入图像,它的最小灰度级A和最大灰度级B的定义为:A=min[f(a,y)]  B=max[f(x,y)]

把A和B分别线性映射到0-255,即 g(x,y)=255/(B-A)*[f(x,y)-A]

直方图均衡化定义:

直方图均衡化,又称直方图修平,它是一种很重要的非线性点运算。该方法的局部对比度,尤其是当图像的有用的数据的对比度相当接近的时候。通过这种方法,亮度可以更好的在直方图上分布。

直方图均衡化的思想是把原始图像的的直方图变换为均衡分布的形式,这样就增加了像素灰度值的动态范围,从而可达到增强图像整体对比度的效果。

它的具体算法为:首先计算图像f的各灰度级中像素出现的概率:P(i)=ni/n  i=0,1,...,L-1

其中ni表示灰度级i 出项额次数,L是图像中所有的灰度书。P实际是图像的直方图归一化到0-1范围内。把c作为对应于P的累计概率函数,定义为:c(i)=p(x0)+p(x1)+p(x2)+...+p(xi)

c是图像的累计归一化直方图。

创建一个形式为y=T(x)的变化,对于原始图像中的每一值它就产生一个y,这样y的累计概率函数就可以在所有制范围内进行线性化,转换公式为:yi=T(xi)=c(i)

这时的T是将不同的等级映射到0-1范围内。

直方图匹配定义:

直方图匹配,又称为直方图规定化,是变换图像的直方图为规定的某种形式的直方图。能够指定想要的处理后的图像的直方图形状在某些应用中是非常有用的,它属于非线性点运算,直方图均衡化实际上

是直方图匹配的一种特例。

把现有的直方图Ha(ak)的图像变换到具有某一指定直方图Hc(ck)的图像c(x,y),一般分为两步进行:先把图像a(x,y)变换为具有均衡化直方图的中间图像b(x,y),而后把b(x,y)变换到c(x,y)。

C#数字图像处理算法学习笔记(二)--点运算与直方图的更多相关文章

  1. C#数字图像处理算法学习笔记(三)--图像几何变换

    C#数字图像处理算法学习笔记(三)--图像几何变换 几何图像处理包括 图像的平移变换,镜像变换,旋转变换,伸缩变换,在这里仅以水平镜像为例,通过代码来理解其基本操作方式: 翻转前:

  2. C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法

    C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法 Bitmap类:此类封装了GDI+中的一个位图,次位图有图形图像及其属性的像素数据组成.因此此类是用于处理像素数据定义的图形的对象.该类的 ...

  3. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  4. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  5. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  6. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  7. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  8. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  9. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

随机推荐

  1. 3分钟实现iOS语言本地化/国际化(图文详解)

    前言 语言本地化,又叫做语言国际化. 是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言. 往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这 ...

  2. Java基础之8个基本类型及基本类型间转换

    8种基本数据类型 Java语言有8种基本数据类型, 分别用于存储整数.浮点数.字符数据和布尔类型数据.需要注意的是: 现在所介绍的仅仅是基本数据类型,后续还会介绍很多非基本数据类型.基本数据类型如图 ...

  3. Django博客开发教程,Django快速开发个人blog

    学DjangoWEB框架,估计大部分的朋友都是从Blog开发开始入门的,Django中文网发布了一个Django开发教程,这个教程简单易懂,能让你快速的使用Django开发一个漂亮的个人blog,是D ...

  4. springboot junit单元测试报错

    1.测试类中如下方框为主函数 2.application.yml注意如下2个地方 3.主函数

  5. 2018北京网络赛D 80days (尺取)

    #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules ...

  6. wordpress显示FTP上传

    在开始添加的配置文件里添加以下内容 define("FS_METHOD","direct"); define("FS_CHMOD_DIR", ...

  7. Qt 学习之路 2(20):event()

    Qt 学习之路 2(20):event() 豆子 2012年10月10日 Qt 学习之路 2 43条评论 前面的章节中我们曾经提到event()函数.事件对象创建完毕后,Qt 将这个事件对象传递给QO ...

  8. POJ1052 Plato's Blocks

    题目来源:http://poj.org/problem?id=1052 题目大意: 把1*1*1的小立方体通过粘接相邻面组成大的立方体的形状.如下图所示: 一层一层地堆叠,立方体从三个方向的投影会分别 ...

  9. windwos-sshfs

    从 http://www.jianshu.com/p/d79901794e3d 转载 目的 最近因为需要在linux虚拟机里进行开发程序,虽然在linux里有超强的编辑器vim,但vim开发html前 ...

  10. DropDownList年份的添加

    http://blog.sina.com.cn/s/blog_4b9e030e01007sc3.html