zoukankan      html  css  js  c++  java
  • 直方图均衡化算法 & 代码

    做了一天,都是黑屏,最后发现,竟然是一个局部变量引起。

       基本是分3步,这个是在灰度图像下 实现均衡化直方图。 彩色下直接均衡化研究出来再补上。

    第一步:

      计算初始直方图,即记录每一个像素出现次数。

    for(int y = 0; y < m_image->GetHeight(); y++)
    {
        for(int x = 0; x < m_image->GetWidth();x++)
        {
            COLORREF rgb = m_image->GetPixel(x,y);
    int rValue = GetRValue(rgb); // 记录每一个像素出现次数。 hist[rValue]++; } }

    第二步:

       由上面得到的初始直方图计算归一化直方图和累积直方图

    int hist[256] = {0};
    
    double phist[256];
    
    for (int i = 0; i <= 255 ;i++)
    {
        phist [i] = (double) hist[i] / (m_image->GetHeight() * m_image->GetWidth());  //归一化直方图 即每个像素出现概率
    }
    double dSum[256] = {0.0};
    
    for(int i = 0; i<=255;i++)
    {
        if(i != 0)
        {
            dSum[i] = dSum[i-1] + phist[i];
        }
        else//累积直方图
        {
            dSum[i]  = phist[i];
        }
    }

    第三步:

      求均衡化映射(旧图->新图)关系,并写入新图像

    for(int y = 0; y < m_image->GetHeight(); y++)
    {
        for(int x = 0; x < m_image->GetWidth();x++)
        {
            COLORREF rgb = m_image->GetPixel(x,y);
    
            int rValue = GetRValue(rgb);
    
            rValue = Mapping[rValue];        //根据映射关系实现均衡化
            rgb = RGB(rValue,rValue,rValue);
            m_image->SetPixel(x,y,rgb);
        }
    }
  • 相关阅读:
    python之map,filter
    python函数的闭包
    Hibernate查询对象的方法浅析
    底部浮动
    DataGrid-自定义排序
    DataGrid-1
    Alert
    2014-01-04 SQL练习
    proguard-gui 混淆代码简要笔记
    vim利用coc补全的配置过程
  • 原文地址:https://www.cnblogs.com/WilsonPan/p/2533266.html
Copyright © 2011-2022 走看看