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

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类:

2011-01-06 16:28:46

原理
灰度直方图是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度级内容 。任何一幅图像的直方图都包括了可观的信息,某些类型的图像可由其直方图完全描述。灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标是该灰度出现的频率 ( 像素个数与图像像素总数之比 )

灰度图代码:
        src = dst = (Uint8 *)frameBuffPtr->frame.frameBufferPtr;

        for ( i = 0 ; i < inputHeight ; i ++ )
        {
            for( j = 0 ; j < inputWidth ; j++ ,dst += 2)
                *dst = 0x80;  /* CbCr=128,转化灰度图 */

            /* statistic the y diginal */
            ICETEKDM6437B2Statistic(src + i * inputWidth * 2, inputWidth);
        }

      /* draw the histogram on screen
      第一个参数指出直方图的显示起始位置*/
        ICETEKDM6437B2Histogram(src + inputWidth * (inputHeight - HISTOHIGH - 10) * 2 + 50 * 2, inputWidth);
-----------------------------------------------------------------------------------------------
void ICETEKDM6437B2Statistic(unsigned char *src, short pixelCount)
{
    int i;
    for ( i=0 ; i    {
        nHisto[src[i * 2 + 1]]++;//y 值构成的数组,统计Y值分布
    }
}
-----------------------------------------------------------------------------------------------
void ICETEKDM6437B2Histogram(unsigned char * src, short pixelCount)
{
    unsigned char * dst = src;
    m_nWork=0;

    /* look for the max data */
    for ( mi=0 ; mi < HISTOWIDTH ; mi++ )
        if ( m_nWork < nHisto[mi] )
            m_nWork = nHisto[mi];

    /* get the scale */
    m_nWork /= (HISTOHIGH - 1);// max/127

    /* get the scale count */
    for ( mi=0;mi<256;mi++ )
    {
        nHisto[mi]/=m_nWork;// 此数组用来统计新值 0-127
    }

    /* draw the histogram 画直方图*/
    for(mi = 0 ; mi < HISTOHIGH ; mi++)
    {
        dst = src;
        for(mj = 0 ; mj < HISTOWIDTH ; mj++)
        {
            /* Set cbcr */
            *dst++ = 0x80;//cr=cb=128

            if(mi >= (HISTOHIGH - 1 - nHisto[mj]))
                /* Set y value*/
                *dst++ = HISTOCOLOR;//y=200
            else
                *dst++ = 1;//y=0
        }
        src += pixelCount * 2;//下一行
    }

    js++; js%=2;
    for ( mi=0 ; mi        nHisto[mi]=0;//清零
}

阅读(7455) | 评论(0) | 转发(0) |
0

上一篇:图像翻转

下一篇:直方图均衡

给主人留下些什么吧!~~