C++数字图像处理(1)-伽马变换

https://blog.csdn.net/huqiang_823/article/details/80767019

1、算法原理    伽马变换(幂律变换)是常用的灰度变换,是一种简单的图像增强算法。数学公式如下:(1)    式(1)中,r为输入的灰度值,取值范围为[0, 1]。C称为灰度缩放系数,用于整体拉伸图像灰度,通常取值为1。gamma取值灰度输入输出曲线图如下:图(1) gamma曲线图    从图(1)可知:当gamma>1.0时,伽马变换将拉低图像灰度值,图像视觉上变暗;当gamm<1.0时,伽马变换将提高图像的灰度值,图像视觉上变亮。2、算法定义    输入:8位灰度图像。    输出:8位灰度图像。    参数:gamma值、C值。3、算法实现(1)、公式实现//函数名:gammaTransformation//作用:实现灰度变换中的伽马变换//参数://matInput:输入图像//matOutput : 输出图像//fGamma : 伽马值//fC : C值(缩放系数)//返回值:无//注:支持单通道8位灰度图像void gammaTransformation(cv::Mat& matInput, cv::Mat& matOutput, float fGamma, float fC /*= 1.0f*/){ assert(matInput.elemSize() == 1); //构造输出图像 matOutput = cv::Mat::zeros(matInput.rows, matInput.cols, matInput.type());  //循环中尽量避免除法 float fNormalFactor = 1.0f / 255.0f; for (size_t r = 0; r < matInput.rows; r++) {  unsigned char* pInput = matInput.data + r * matInput.step[0];  unsigned char* pOutput = matOutput.data + r * matOutput.step[0];  for (size_t c = 0; c < matInput.cols; c++)  {   //gamma变换   float fOutput = std::pow(pInput[c] * fNormalFactor, fGamma) * fC;   //数值溢出判断   fOutput = fOutput > 1.0f ? 1.0f : fOutput;   //输出   pOutput[c] = static_cast<unsigned char>(fOutput * 255.0f);  } }}(2)、查表加速    几乎所有的灰度变换算法中,都可以使用查表方法进行加速。在【公式实现】中,循环中调用了库函数pow、并进行了一次if判断。这些操作,可以在循环外提提前计算好,循环中查表即可。在嵌入式系统中,查表法使用较多。优化后的代码如下:void gammaTransformation(cv::Mat& matInput, cv::Mat& matOutput, float fGamma, float fC /*= 1.0f*/){ assert(matInput.elemSize() == 1); //构造输出图像 matOutput = cv::Mat::zeros(matInput.rows, matInput.cols, matInput.type());  //循环中尽量避免除法 float fNormalFactor = 1.0f / 255.0f; //构造查询表 std::vector<unsigned char> lookUp(256); for (size_t m = 0; m < lookUp.size(); m++) {  //gamma变换  float fOutput = std::pow(m * fNormalFactor, fGamma) * fC;  //数值溢出判断  fOutput = fOutput > 1.0f ? 1.0f : fOutput;  //输出  lookUp[m] = static_cast<unsigned char>(fOutput * 255.0f); }  for (size_t r = 0; r < matInput.rows; r++) {  unsigned char* pInput = matInput.data + r * matInput.step[0];  unsigned char* pOutput = matOutput.data + r * matOutput.step[0];  for (size_t c = 0; c < matInput.cols; c++)  {   //查表gamma变换   pOutput[c] = lookUp[pInput[c]];  } }}(3)、测试结果--------------------- 作者:图像大师 来源:CSDN 原文:https://blog.csdn.net/huqiang_823/article/details/80767019 版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/profession/p/10240371.html

时间: 2024-11-12 21:27:31

C++数字图像处理(1)-伽马变换的相关文章

伽马变换(一些基本的灰度变换函数)基本原理及Python实现

1. 基本原理 变换形式 $$s=cr^{\gamma}$$ c与$\gamma$均为常数 可通过调整$\gamma$来调整该变换,最常用于伽马校正与对比度增强 2. 测试结果 图源自skimage 3. 代码 1 def gamma_transformation(input_image, c, gamma): 2 ''' 3 伽马变换 4 :param input_image: 原图像 5 :param c: 伽马变换超参数 6 :param gamma: 伽马值 7 :return: 伽马变

数字图像处理【一】基础理论

1. 基本处理流程: a) 图像预处理: 1) 点运算(灰度直方图/灰度线性变换/灰度对数变换/伽马变换/灰度阈值变换/分段线性变换/直方图均衡化/直方图规定化) 2) 几何变换(图像平移/图像镜像/图像转置/图像缩放/图像旋转/插值算法/图像配准) 3) 空间域图像增强(空间域滤波/图像平滑/中值滤波/图像锐化) 4) 频域图像增强(傅里叶变换/频率滤波) 5) 彩色图像处理(彩色模型(RGB/CMY/CMYK/HSI/HSV/YUV/YIQ/Lab)/彩色补偿/彩色平衡) 6) 形态学图像处

MATLAB数字图像处理(一)基础操作和傅立叶变换

数字图像处理是一门集计算机科学.光学.数学.物理学等多学科的综合科学.随着计算机科学的发展,数字图像处理技术取得了巨大的进展,呈现出强大的生命力,已经在多种领域取得了大量的应用,推动了社会的发展.其中,遥感领域中,对于影像数据的处理均基于数字图像处理的技术.而遥感影像数据作为地理信息科学的重要数据源,如何从中获取有用的信息,是地理信息数据处理中重要的内容. MATLAB作为数学领域应用最广泛的一种软件,集成了对于图片处理的函数和功能,成为了处理数字图像问题的佼佼者.其出众的计算能力和简便的绘图能

【数字图像处理】顶帽变换和底帽变换

文章链接:http://blog.csdn.net/kk55guang2/article/details/78490069 顶帽变换和底帽变换 灰度级图像 f 的顶帽变换(top-hat transformation)定义为f减去其开操作: That(f)=f−(f°b) 类似地,f 的底帽变换(bottom-hat transformation)定义为f的闭操作减去f: Bhat(f)=(f?b)−f   这两个变换的主要应用之一是,用一个结构元通过开操作或闭操作从一副图像中删除物体,而不是拟

[数字图像处理]常见噪声的分类与Matlab实现

1.研究噪声特性的必要性 本文的内容主要介绍了常见噪声的分类与其特性.将噪声建模,然后用模型去实现各式各样的噪声. 实际生活中的各种照片的老化,都可以归结为以下老化模型. 这个模型很简单,也可以直接用以下公式来表达. 在频域内,用以下公式区表示. 根据以上式子,可以看出,老旧照片的复原,主要分为两个任务,一个是去噪:另一个是去卷积,或者称为逆滤波,也就是将老化滤波器做反处理. 本文首先由噪声类型与其建模.随后的博文,会介绍几种基础的去噪方法和基础的逆滤波方法. 2.噪声的实现 2.1    评价

初始----python数字图像处理--:环境安装与配置

一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此,我们这里使用python这个脚本语言来进行数字图像处理. 要使用python,必须先安装python,一般是2.7版本以上,不管是在windows系统,还是linux系统,安装都是非常简单的. 要使用python进行各种开发和科学计算,还需要安装对应的包.这和matlab非常相似,只是matla

OpenCV-跟我一起学数字图像处理之直方图均衡化

从这篇博文开始,小生正式从一个毫不相干专业转投数字图像处理.废话不多说了,talk is cheap. show me the code. 直方图均衡化目的 由于一些图像灰度的分布过于集中,这样会导致图像的层次不够分明,直方图均衡化就是为了让图像的灰度分布更均匀,图像的层次感更强. 数学原理 基于连续灰度分布的结论推导 直方图均衡化属于数字图像处理中灰度变换(intensity transformation)的内容,灰度变换的目的就是找到一个合适的映射函数s=T(r).将原图像的灰度值映射到新的

《数字图像处理原理与实践(MATLAB版)》一书之代码Part5

本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part5,辑录该书第225至第280页之代码(此处应部分读者之需求调整了代码发布的顺序--详细说明请见下面的文章链接),供有需要读者下载研究使用.代码执行结果请参见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MATLAB版)>一书代码发布的说明 http://blog.csdn.net/baimafujinji/article/details/40987807 P245 I = imread(

【图形学】我理解的伽马校正(Gamma Correction)

写在前面 我相信几乎所有做图像处理方面的人都听过伽马校正(Gamma Correction)这一个名词,但真正明白它是什么.为什么要有它.以及怎么用它的人其实不多.我也不例外. 最初我查过一些资料,但很多文章的说法都不一样,有些很晦涩难懂.直到我最近在看<Real Time Rendering,3rd Edition>这本书的时候,才开始慢慢对它有所理解. 本人才疏学浅,写的这篇文章很可能成为网上另一篇误导你的"伽马传说",但我尽可能把目前了解的资料和可能存在的疏漏写在这里