C#数字图像处理算法学习笔记(二)--点运算与直方图
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#数字图像处理算法学习笔记(二)--点运算与直方图的更多相关文章
- C#数字图像处理算法学习笔记(三)--图像几何变换
C#数字图像处理算法学习笔记(三)--图像几何变换 几何图像处理包括 图像的平移变换,镜像变换,旋转变换,伸缩变换,在这里仅以水平镜像为例,通过代码来理解其基本操作方式: 翻转前:
- C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法
C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法 Bitmap类:此类封装了GDI+中的一个位图,次位图有图形图像及其属性的像素数据组成.因此此类是用于处理像素数据定义的图形的对象.该类的 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
随机推荐
- Django会话,用户和注册之session
鉴于cookie的不安全,django自带的session框架会帮我们搞定这些问题 你可以用session 框架来存取每个访问者任意数据, 这些数据在服务器端存储,并对cookie的收发进行了抽象. ...
- 网易CentOS yum源
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
- HashMap vs Hashtable
一.散列 1. HashMap 1) hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示: 当我们往hashmap中put元素的时候,先根据key ...
- silverlight browse information
public class Browser { /// <summary> /// During static instantiation, only the Netscape flag i ...
- 「产品经理全连接系列2」企业如何开展敏捷或DevOps的研发变革
大家好,我是华为云的产品经理 恒少: 作为布道师和产品经理,出差各地接触客户是常态,经常和华为云的客户交流.布道.技术沙龙,但是线下交流,覆盖的用户总还是少数. 我希望可以借线上的平台,和用户持续交流 ...
- Java 实现栈,队列
package base.structure; /** * @program: Algorithm4J * @description: 实现一个Stack * @author: Mr.Dai * @c ...
- 【ABP开发】:asp.net core 中使用mysql
EntityFrameworkCore项目--Nuget包管理,卸载包: Microsoft.EntityFrameworkCore.SqlServer: EntityFrameworkCore项目和 ...
- windows_study_2
描述:如何确定像%ProgramFiles%这样格式的目录的具体位置? 解决:运行——cmd——echo %ProgramFiles%——回车——界面就显示出目录位置了.
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_new新建对象
CLR使用 new 操作符来创建新对象,例如:Employee e=new Employee("Param1"); 以下是 new 操作符所做的事情. 它计算类型及其所有基类型 ...
- Codeforces-Salem and Sticks(枚举+思维)
Salem gave you nn sticks with integer positive lengths a1,a2,-,ana1,a2,-,an. For every stick, you ca ...