直方图均衡化(cvEqualizeHist)

本文转自:http://blog.csdn.net/hitwengqi/article/details/6897291

我们可以对图像做点事情尝试扩大其动态范围,对这个操作最常用的技术是直方图均衡化,可以将比较淡的图像变换为比较深的图像(即增强图像的亮度及对 比度)。直方图均衡化后面潜在的数学原理是一个分布(输入的亮度直方图)被映射到另一个分布(一个更宽,理想统一的亮度值分布),映射函数是一个累积分布 函数。对于连续分布,结果将是准确的均衡化。在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))进行图像变换。

该方法归一化图像亮度和增强对比度。

 ----------------------------------------------------------------------------------------------

  1. #include <highgui.h>  
  2. #include <cv.h>  
  3.   
  4. int main(int argc, char** argv)  
  5.  
  6.     int i;  
  7.     IplImage* src cvLoadImage( argv[1], );  
  8.     IplImage* imgChannel[4] 0, 0, 0, };  
  9.     IplImage* dst cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, );  
  10.   
  11.     if( src  
  12.      
  13.         for( 0; src -> nChannels; i++  
  14.          
  15.             imgChannel[i] cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, );  //要求单通道图像才能直方图均衡化  
  16.          
  17.         //通道分离  
  18.         cvSplit( src, imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3] );  
  19.         for( 0; dst -> nChannels; i++  
  20.          
  21.             //直方图均衡化,原始图像和目标图像必须是单通道  
  22.             cvEqualizeHist( imgChannel[i], imgChannel[i] );  
  23.          
  24.   
  25.         //通道组合  
  26.         cvMerge( imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3], dst );  
  27.         cvNamedWindow( "src", );  
  28.         cvShowImage( "src", src );  
  29.         cvNamedWindow( "Equalize", );  
  30.         cvShowImage( "Equalize", dst );  
  31.   
  32.         cvWaitKey(0);  
  33.         //释放资源  
  34.         for( 0; src -> nChannels; i++  
  35.          
  36.             if( imgChannel[i]  
  37.              
  38.                 cvReleaseImage( &imgChannel[i] );  
  39.                 //imgChannel[i] 0;  
  40.              
  41.          
  42.         cvReleaseImage( &dst );  
  43.      
  44.   
  45.     return 0;  
  46.  
  ----------------------------------------------------------------------------------------------

source image


EqualizeHist image


由此看出,图像的亮度及对比度明显增强,画面感更强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值