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查询,即从单个数据库表中检索数据的单条语 ...
随机推荐
- c++ 委托构造函数
#include<iostream> ; using namespace std; class Cbox{ int a ; int b ; int c ; public: int g ; ...
- form表单操作
Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 简单例子 For ...
- 前端JS AES加密 后端PHP AES加解密
<!DOCTYPEhtml> <html> <head> <title>aes demo</title> </head> < ...
- php excel开发01
启用cache
- 1、OpenCV Python 图像加载和保存
__author__ = "WSX" import cv2 as cv # 这里的文件是图片或者视频 def Save_File( image ): cv.imwrite(&quo ...
- DRAM与SRAM
传送门:https://www.cnblogs.com/nano94/p/4014082.html 关于内存的补充知识传送门:https://blog.csdn.net/Hello_Sue/artic ...
- Linode安装环境
Ubuntu 18 密码:Fenghaiyan35 netstat -plnt //查看所有文件 sudo apt-get install apac ...
- Vim 编辑器中全选操作
ggVG 解释: gg 让光标移到首行,在vim才有效,vi中无效 V 是进入Visual(可视)模式 G 光标移到最后一行
- 优先队列priority_queue的简单应用
优先队列 引入 优先队列是一种特殊以及强大的队列. 那么优先队列是什么呢? 说白了,就是一种功能强大的队列. 它的功能强大在哪里呢? 四个字:自动排序. 优先队列的头文件&&声明 头文 ...
- python 函数调用
##########定义函数######### 如果不主动调用函数,函数是不会执行的 def say_hello(): print 'hello1' print 'hello2' ...