图像的伽马变换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuxiangxxl/article/details/80677002

Gamma变换: y=x^gamma; 
gamma>1, 较亮的区域灰度被拉伸,较暗的区域灰度被压缩的更暗,图像整体变暗; 
gamma<1, 较亮的区域灰度被压缩,较暗的区域灰度被拉伸的较亮,图像整体变亮; 
参考: 
http://blog.csdn.net/lxy201700/article/details/24929013

#include<iostream>
#include<highgui\highgui.hpp>
#include<core/core.hpp>  
#include<math.h>
using namespace cv;  
using namespace std;  
// get Gamma transformation look up table
void GetGammaTransLUT(uchar *pLUT, float Gamma, int iLUTLen)
{
    for(int i=0;i<iLUTLen;i++)
    {
        pLUT[i]=(uchar)(pow((float)i/255.0,Gamma)*255);
    }
}
void GammaTrans(uchar *pSrc, uchar *pDst, const int iHeight,
                const int iWidth, float Gamma)
{
    uchar *pLUT=new uchar[256];
    GetGammaTransLUT(pLUT,Gamma,256);
    for(int i=0;i<iHeight*iWidth;i++)
    {
        pDst[i]=(uchar)pLUT[pSrc[i]];
    }
    delete []pLUT;
}
int main()
{
    Mat image=imread("C:\\迅雷下载\\图像处理\\Projects\\MyOpenCV\\MyOpenCV\\DIP3ECH06\\Fig0638(a)(lenna_RGB).tif",0); 
    Mat image_Dst=imread("C:\\迅雷下载\\图像处理\\Projects\\MyOpenCV\\MyOpenCV\\DIP3ECH06\\Fig0648(b)(lenna-noise-G-gauss-mean0-var800).tif",0); 
    const int iHeight=image.rows;
    const int iWidth=image.cols;
    uchar* pSrc=image.data;//new uchar[iHeight*iWidth];
    uchar* pDst=image_Dst.data;//new uchar[iHeight*iWidth];
    GammaTrans(pSrc,pDst,iHeight,iWidth,2);
    //namedWindow("Origin",1);
    imshow("Origin",image);
    //创建一个名字为“Lena”的图像显示窗口,(不提前声明也可以)  
    //namedWindow("Gamma Trans",1);  
    //显示图像  
    imshow("Gamma Trans",image_Dst);  
    //等待按键  
    waitKey();  
    return 0;  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

这里写图片描述

猜你喜欢

转载自blog.csdn.net/liuxiangxxl/article/details/80677002