本文简要描述了均衡化原理及数学实现等理论问题,最终利用emgucv实现图像的灰度均衡。

直方图的均衡化,这是图像增强的常用方法。

一、均衡化原理及数学实现(转载)

均衡化原理及数学实现可重点参看——《直方图均衡化》和《图像处理(3)_灰度分布均衡化

灰度分布均衡化又称直方图均衡化。

1、概述

这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

2、原理及数学实现

我们来看一个灰度图像,让ni表示灰度i出现的次数,这样图像中灰度为i 的像素的出现概率是

L 是图像中所有的灰度数,n 是图像中所有的像素数, p 实际上是图像的直方图,归一化到 0....1。

把 c 作为对应于 p 的累计概率函数, 定义为:

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

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

注意 T 将不同的等级映射到 0...1 域,为了将这些值映射回它们最初的域,需要在结果上应用下面的简单变换:

上面描述了灰度图像上使用直方图均衡化的方法,但是通过将这种方法分别用于图像RGB颜色值的红色、绿色和蓝色分量,从而也可以对彩色图像进行处理。

上述是维基百科对直方图均衡化的原理解释,转化为算法描述则是:
(1)获取目标图像的直方图。

(2)从获取直方图图中获取灰度密度分布。【就是每个灰度级像素个数 / 灰度直方图中像素的总个数】

(3)对密度直方图进行累加,每个灰度级密度是前面所有灰度级的密度总和。

(4)对原图像进行遍历,每个像素值为累加后的概率密度索引值  并  乘上255 对图像进行还原。

二、程序实现

opencv的编程方法可参看《【OpenCV入门指南】第九篇 灰度直方图均衡化》。

emgucv的编程方法相当简单,利用的函数就是cvEqualizeHist。

程序主体框架可利用  [转载+原创]Emgu CV on C# (二) —— Emgu CV on 灰度化 文章中的程序文件。

给窗体添加第三个PictureBox,并将SizeModel设置为Zoom

在灰度化功能函数后直接添加下段程序函数,so easy。

       //均衡化
IntPtr Histimg = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(grayimg), Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, );
CvInvoke.cvEqualizeHist(grayimg, Histimg);
MIplImage histmi = (MIplImage)Marshal.PtrToStructure(Histimg, typeof(MIplImage));
Image<Gray, Byte> histimage = new Image<Gray, Byte>(histmi.width, histmi.height, histmi.widthStep, histmi.imageData);
pictureBox3.Image = histimage.ToBitmap();

三、结果分析

将《【OpenCV入门指南】第九篇 灰度直方图均衡化》处理的图片剪切下来,由于只有灰度图片,也对该图片进行了灰度处理,并将灰度处理之后的图片进行均衡化。

1、原程序图片

2、剪切获取灰度图片

3、通过emgucv方法进行均衡化,获取的最终图片与原文章得到的图片进行比对。

原文章图片

本文均衡化后的

转载请标明出处,原文地址:http://www.cnblogs.com/MobileBo/p/3917956.html

都是调用的同一个dll,所以差别不是很大,只是emgucv方法中又进行了一次灰度化,会有部分细节损失。

从整理效果看,已经达到了预期要求,灰度直方图均衡化对灰度图的图像增强效果明显,对比度大大增强。

[转载+原创]Emgu CV on C# (三) —— Emgu CV on 均衡化的更多相关文章

  1. [转载+原创]Emgu CV on C# (二) —— Emgu CV on 灰度化

    本文主要对彩色图片灰度化的方法及其实现过程进行总结,最终给出Emgu CV实现的代码. 一.灰度化原理及数学实现(转载自——<图像灰度化方法总结及其VC实现> 该篇文章使用opencv实现 ...

  2. [转载+原创]Emgu CV on C# (一) —— Emgu CV on Visual C# 2010

    2014-08-16 最近要进行图像识别,准备利用几天的时间研究一下Emgu CV,花了一晚上功夫进行调试环境安装,期间遇到了不少问题,现梳理一下安装过程和调试过程中出现的问题. 中间有转载别人的部分 ...

  3. [转载+原创]Emgu CV on C# (五) —— Emgu CV on 局部自适应阈值二值化

    局部自适应阈值二值化 相对全局阈值二值化,自然就有局部自适应阈值二值化,本文利用Emgu CV实现局部自适应阈值二值化算法,并通过调节block大小,实现图像的边缘检测. 一.理论概述(转载自< ...

  4. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  5. 【opencv】cv::Mat转std::vector<cv::Point2d> (注意两容器中数据类型的一致性)

    获取cv::Mat大小: mymat.size() 获取cv::Mat指定位置的值:需指定数据类型,且注意数据类型应与存入时的数据类型一致,否则会导致不抛出异常的数据错误 mymat.at<,i ...

  6. [转载+原创]Emgu CV on C# (四) —— Emgu CV on 全局固定阈值二值化

    重点介绍了全局二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也 ...

  7. [转载+原创]Emgu CV on C# (七) —— Emgu CV on 轮廓检测

    轮廓检测 对于查找轮廓我们一般要对图像Canny检测.但是对于很特殊的场合其实我们还可以直接对二值化的图像进行轮廓的提取. 关键函数 1. cvFindContours Retrieves conto ...

  8. [转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测

    Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较. 图像的边缘检测的原理是检测出图像中所有灰度值变化较大 ...

  9. Emgu学习之(三)——操作图像数据

    Visual Studio Community 2015 工程和代码:http://pan.baidu.com/s/1jHmlQeE 内容 在这篇文章中将提到以下内容: 修改像素值 图像ROI 图像加 ...

随机推荐

  1. C#实现在CAD图纸中插入另一个DWG图块的代码

    C#实现在CAD图纸中插入另一个DWG图块的代码 PromptPointResult ppr = ed.GetPoint("请选择插入点:"); Point3d pt = ppr. ...

  2. Part 57 to 58 Why should you override ToString and Equal Method

    Part 57 Why should you override ToString Method sometimes you can override ToString method like that ...

  3. ubuntu 删除除了某个文件或文件夹之外的所有文件或者目录

    今天需要将网站根目录下的所有文件全部删除但是还需要保留phpmyadmin这个文件夹,本来是可以一个一个删除的,后来想应该会有 一个命令是可以用一个命令删除除了phpmyadmin之外的所有文件和文件 ...

  4. 快速调试chromium

    上一篇我们简单的将了在Ubuntu上编译chromium,android content_shell_apk的编译,一切顺利的就能生成apk.但是我们仅仅只是照搬了人家google开源的东西,作为一个 ...

  5. CCNA长语

    思科认证网络支持工程师(Cisco Certified Network Associate_CCNA) 专业英文词汇大全 10BaseT-----原始IEEE802.3标准的一部分,1OBaseT是1 ...

  6. (转)linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top

    衡量CPU性能的指标: 1,用户使用CPU的情况:CPU运行常规用户进程CPU运行niced processCPU运行实时进程 2,系统使用CPU情况:用于I/O管理:中断和驱动用于内存管理:页面交换 ...

  7. Ajax 技术一

    一.Ajax概述 1.历史起源 1998年,微软公司Outlook Web Access研发小组在当时的IE浏览器中集成了一种技术,可以在客户端无刷新的前提下向服务器端发送Http请求,这门技术称之为 ...

  8. 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署

    部署流程概述 在微软的iis服务器上部署基于ArcGIS  Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...

  9. java.util.TreeSet源码分析

    TreeSet是基于TreeMap实现的,元素的顺序取决于元素自身的自然顺序或者在构造时提供的比较器. 对于add,remove,contains操作,保证log(n)的时间复杂度. 因为Set接口的 ...

  10. python+selenium环境配置(windows7环境)

    下载python[python开发环境] http://python.org/getit/ 下载setuptools[python的基础包工具] http://pypi.python.org/pypi ...