【转】直方图均衡化
来源:互联网 发布:电气制图cad软件 编辑:程序博客网 时间:2024/05/29 12:50
原文:http://blog.csdn.net/sundy_2004/article/details/7259614
我们可以对图像做点事情尝试扩大其动态范围,对这个操作最常用的技术是直方图均衡化,可以将比较淡的图像变换为比较深的图像(即增强图像的亮度及对比度)。直方图均衡化后面潜在的数学原理是一个分布(输入的亮度直方图)被映射到另一个分布(一个更宽,理想统一的亮度值分布),映射函数是一个累积分布函数。对于连续分布,结果将是准确的均衡化。在cvEqualizeHist中,原始图像及目标图像必须是单通道,大小相同的8位图像,对于彩色图像,必须先将每个通道分开,再分别进行直方图均衡化处理,然后将通道合并形成新的图像。
----------------------------------------------------------------------------------------------
Split
Split
分割多通道数组成几个单通道数组或者从数组中提取一个通道
void cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1,
CvArr* dst2, CvArr* dst3 );
#define cvCvtPixToPlane cvSplit
src
原数组.
dst0...dst3
目标通道
函数 cvSplit 分割多通道数组成分离的单通道数组d。可获得两种操作模式 . 如果原数组有N通道且前N输出数组非NULL, 所有的通道都会被从原数组中提取,如果前N个通道只有一个通道非NULL函数只提取该指定通道,否则会产生一个错误,馀下的通道(超过前N个通道的以上的)必须被设置成NULL,对于设置了COI的IplImage 结使用cvCopy 也可以从图像中提取单通道。
Merge
Merge
从几个单通道数组组合成多通道数组或插入一个单通道数组
void cvMerge( const CvArr* src0, const CvArr* src1,
const CvArr* src2, const CvArr* src3, CvArr* dst );
#define cvCvtPlaneToPix cvMerge
src0... src3
输入的通道.
dst
输出数组.
函数cvMerge 是前一个函数的反向操作。如果输出数组有N个通道并且前N个输入通道非NULL,就拷贝所有通道到输出数组,如果在前N个通道中只有一个单通道非NULL ,只拷贝这个通道到输出数组,否则 就会产生错误。除前N通道以外的馀下的通道必须置NULL。对于设置了COI的 IplImage结构使用 cvCopy也可以实现向图像中插入一个通道 。
EqualizeHist
灰度图象直方图均衡化
void cvEqualizeHist( const CvArr* src, CvArr* dst );
src
输入的 8-比特 单信道图像
dst
输出的图像与输入图像大小与数据类型相同
函数 cvEqualizeHist 采用如下法则对输入图像进行直方图均衡化:
1. 计算输入图像的直方图 H
2. 直方图归一化,因此直方块和为255
3. 计算直方图积分:
4. 采用H'作为查询表:dst(x,y)=H'(src(x,y))进行图像变换。
该方法归一化图像亮度和增强对比度。
----------------------------------------------------------------------------------------------
/*code*/
- #include <highgui.h>
- #include <cv.h>
- int main(int argc, char** argv)
- {
- int i;
- IplImage* src = cvLoadImage( argv[1], 1 );
- IplImage* imgChannel[4] = { 0, 0, 0, 0 };
- IplImage* dst = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 3 );
- if( src )
- {
- for( i = 0; i < src -> nChannels; i++ )
- {
- imgChannel[i] = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 ); //要求单通道图像才能直方图均衡化
- }
- //通道分离
- cvSplit( src, imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3] );//BGRA
- for( i = 0; i < dst -> nChannels; i++ )
- {
- //直方图均衡化,原始图像和目标图像必须是单通道
- cvEqualizeHist( imgChannel[i], imgChannel[i] );
- }
- //通道组合
- cvMerge( imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3], dst );
- cvNamedWindow( "src", 1 );
- cvShowImage( "src", src );
- cvNamedWindow( "Equalize", 1 );
- cvShowImage( "Equalize", dst );
- cvWaitKey(0);
- //释放资源
- for( i = 0; i < src -> nChannels; i++ )
- {
- if( imgChannel[i] )
- {
- cvReleaseImage( &imgChannel[i] );
- //imgChannel[i] = 0;
- }
- }
- cvReleaseImage( &dst );
- }
- return 0;
- }
- 【转】直方图均衡化
- 直方图均衡化(转)
- 直方图均衡化、自适应直方图均衡化
- 直方图均衡化原理(转)
- 直方图均衡化推导
- 直方图均衡化
- 直方图均衡化
- 直方图均衡化
- 直方图均衡化
- 灰度直方图均衡化
- 直方图均衡化
- 直方图均衡化
- 直方图均衡化
- matlab直方图均衡化
- 直方图均衡化
- opencv直方图均衡化
- 直方图均衡化原理
- 直方图均衡化
- iOS UITextFiled设置样式为有下划线的那种
- 《大话数据结构》之堆排序
- centos7.0 阿里巴巴学生服务器搭配环境实录(1)--java1.8环境搭建
- windows下python2.7版本numpy,Scipy,matplotlib安装
- jquery 获取绑定在某个节点上的 事件执行代码
- 【转】直方图均衡化
- logcat的显示问题
- Android 三星手机拍照无法收到回调问题
- KMP与next数组
- Java两个变量的互换(不借助第3个变量)具体实现方法
- 在一个千万级的数据库查寻中,如何提高查询效率?
- HDU5542(dp+树状数组)
- Android字符串进阶之三:字体属性及测量(FontMetrics)
- 基于libRTMP的流媒体直播之 AAC、H264 推送