原理
直方图均衡也称为灰度均衡,目的是通过点运算使输入图象的灰度分布较为均匀。
按照图象的概率密度函数 (PDF ,归一化到单位面积的直方图 ) 的定义:
P(x)=H(x)/A
其中 H(x) 为直方图, A为图象的面积。
对于没有归一化的情况,只要乘以最大灰度值( D Max ,对于灰度图就是 255 )即可。
直方图均衡代码:
src = dst = (Uint8 *)(frameBuffPtr->frame.frameBufferPtr);
for ( i = 0 ; i < inputHeight ; i ++ )
{
/* statistic the y diginal */
ICETEKDM6437B2Statistic(src + i * inputWidth * 2, inputWidth);
}
/* draw the histogram_enhance on screen */
ICETEKDM6437B2HistogramEnhance();
------------------------------------------------------------------------------------------------
void ICETEKDM6437B2BoardInit()
{
js=0;
for ( mi=0 ; mi
{
fHisto[mi]=0.0f;
lut[mi]=0;
}
}
-------------------------------------------------------------------------------------------
void ICETEKDM6437B2Statistic(unsigned char *src, short pixelCount)
{
int i;
for ( i=0 ; i {
fHisto[src[i * 2 + 1]]++;//这个数组统计Y值
src[i * 2] = 0x80;//cr=cb=128
src[i * 2 + 1]=lut[src[i * 2 + 1]];//y=0
}
}
------------------------------------------------------------------------------------------------
void ICETEKDM6437B2HistogramEnhance()
{
m_fWork=720*480; fHisto[0]/=m_fWork;
for ( mi=1;mi {
fHisto[mi]/=m_fWork;
fHisto[mi]+=fHisto[mi-1];//归一化形式
}
for ( mi=0;mi {
m_fWork=fHisto[mi];
m_fWork*=255;//没有归一化形式
lut[mi]=(unsigned char)m_fWork;//y=均衡化后的值
}
for ( mi=0;mi fHisto[mi]=0.0f;
}
------------------------------------------------------------------------------------------------
阅读(883) | 评论(0) | 转发(0) |