Chinaunix首页 | 论坛 | 博客
  • 博客访问: 292722
  • 博文数量: 109
  • 博客积分: 2116
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 15:38
文章分类

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类:

2011-01-06 19:17:38

原理
直方图均衡也称为灰度均衡,目的是通过点运算使输入图象的灰度分布较为均匀。
按照图象的概率密度函数 (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) |
给主人留下些什么吧!~~