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. baidumap应用

    需要在安卓平台利用baidumap SDK进行二次开发, 注册好,创建应用 利用jdk/bin里的keytool做Android SDK安全码 进入.android(参照下图):输入keytool - ...

  2. 软件测试就业必备知识点&自学软件测试-Dotest-2019

    软件测试就业必备知识点&自学测试&教学大纲-Dotest-2019

  3. 最短路【洛谷P1462】 通往奥格瑞玛的道路

    P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...

  4. 数据结构31:树(Tree)详解

    复制广义表数据结构中的树 树是数据结构中比较重要也是比较难理解的一类存储结构.本章主要主要围绕二叉树,对树的存储以及遍历做详细的介绍,同时还会涉及到有关树的实际应用,例如构建哈弗曼编码等. 由于树存储 ...

  5. 1.Tow Sum(两数和)

    Level: ​ Easy 题目描述: Given an array of integers, return indices of the two numbers such that they add ...

  6. kuangbin专题七 HDU1540 Tunnel Warfare (前缀后缀线段树)

    During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...

  7. react 什么是虚拟DOM?深入了解虚拟DOM

    底层的理论基础 一. 原始生成步骤 1.state 数据 2.jsx 模版 3.数据 + 模板 结合,生成真实的DOM,来显示 4.state 发生改变了 5.数据 + 模板 结合,生成真实的DOM, ...

  8. day31 管道 进程池 数据共享

    1.    管道(了解) #创建管道的类: Pipe([duplex]):在进程之间创建一条管道,并返回元组(conn1,conn2),其中conn1,conn2表示管道两端的连接对象,强调一点:必须 ...

  9. Java 目录和文件的复制

    1.复制一个目录及其子目录.文件到另外一个目录 //复制一个目录及其子目录.文件到另外一个目录 public void copyFolder(File src, File dest) throws I ...

  10. 3 不用IDE开发groovy

    1       不用IDE开发groovy 1.1  不用IDE开发的方法 可以在IDE中运行Groovy类或者脚本,但是Groovy也提供了其他运行途径.你能运行Groovy代码基于以下: ·    ...