图像的象素值变换,包括亮度、对比度和GAMMA校正算法,环境是OPENCV4.0,VC6.0。算法参考了MATLAB函数 imadjust 。
//
// perform histgram equalization for single channel image
//
#include "cv.h"
#include "highgui.h"
/*
Reference for correspondent MATLAB function: imadjust
IMADJUST Adjust image intensity values or colormap.
J = IMADJUST(I,[LOW_IN HIGH_IN],[LOW_OUT HIGH_OUT],GAMMA) maps the
values in intensity image I to new values in J such that values between
LOW_IN and HIGH_IN map to values between LOW_OUT and HIGH_OUT. Values
below LOW_IN and above HIGH_IN are clipped; that is, values below LOW_IN
map to LOW_OUT, and those above HIGH_IN map to HIGH_OUT. You can use an
empty matrix ([]) for [LOW_IN HIGH_IN] or for [LOW_OUT HIGH_OUT] to
specify the default of [0 1]. GAMMA specifies the shape of the curve
describing the relationship between the values in I and J. If GAMMA is
less than 1, the mapping is weighted toward higher (brighter) output
values. If GAMMA is greater than 1, the mapping is weighted toward lower
(darker) output values. If you omit the argument, GAMMA defaults to 1
(linear mapping).
Note that if HIGH_OUT < LOW_OUT, the output image is reversed, as in a
photographic negative.
====
src and dst are grayscale, 8-bit images;
Default input value:
[low, high] = [0,1];
[bottom, top] = [0,1];
gamma = 1;
if adjust successfully, return 0, otherwise, return non-zero.
Author: R.Z.Liu, 18/09/04
====
*/
int ImageAdjust(IplImage* src, IplImage* dst,
double low, double high, // low and high are the intensities of src
double bottom, double top, // mapped to bottom and top of dst
double gamma )
{
double low2 = low*255;
double high2 = high*255;
double bottom2 = bottom*255;
double top2 = top*255;
double err_in = high2 - low2;
double err_out = top2 - bottom2;
int x,y;
double val;
if( low<0 && low>1 && high <0 && high>1 && bottom<0 && bottom>1 && top<0 && top>1)
return 1;
// intensity transform
for( y = 0; y < src->height; y++)
{
for (x = 0; x < src->width; x++)
{
val = ((uchar*)(src->imageData + src->widthStep*y))[x];
val = pow((val - low2)/err_in, gamma) * err_out + bottom2;
if(val>255) val=255; if(val<0) val=0; // Make sure src is in the range [low,high]
((uchar*)(dst->imageData + dst->widthStep*y))[x] = (uchar) val;
}
}
return 0;
}
分享到:
相关推荐
本资源包含了一系列关于数字图像处理的基础操作的源代码,适合初学者深入理解和实践。下面将详细介绍这些知识点: 1. BMP文件读写:BMP是位图文件格式,常用于存储未经压缩的图像数据。源码中提供了读取和写入BMP...
【图像灰度值调整】 在图像处理中,调整图像的灰度值是一项基本操作,它涉及到像素值的变换,以改变图像的亮度、对比度或进行伽玛校正。这通常用于改善图像的视觉效果,使其更易于观察或分析。在给定的文档中,提到...
本项目涉及的是利用C++编程语言实现BMP格式图像的灰度化处理,这是图像处理中的基础操作,主要目的是将彩色图像转化为单色调的图像,即每个像素只有一个灰度值。灰度化可以简化图像,便于后续的分析和处理。 首先,...
"BitmapGray"这个文件可能是实现上述功能的C++、C#或其他编程语言的源代码文件,包含了函数或类来完成位图的读取、灰度化和写入操作。为了深入理解并使用这个源代码,需要具备基本的编程知识,特别是关于图像处理和...
此外,你提供的文件名"图像灰度值调整(C-C++源代码).mht"可能包含一个具体的示例代码,但.mht文件是一种单个文件的Web存档格式,通常不用于源代码。如果需要查看C或C++代码,你可能需要从其他来源获取。另一方面,...
在压缩包中可能包含了实现这些功能的源代码文件,如`灰度变换.cpp`,这些文件会详细展示上述步骤的具体实现,包括可能的优化和细节处理,如边界检查、错误处理以及性能考虑。 总结来说,通过C++实现图像的灰度变换...
在这个名为"VC++图像灰度化程序、直方图规定化"的项目中,开发者使用VC++(Visual C++)编程语言实现了一个图像处理程序,专注于图像的灰度化和灰度线性化过程。 首先,我们来详细了解一下彩色图像灰度化的概念。在...
采用大律法灰度图二值化的源代码,提供了主函数机二值化的调用函数
3. **遍历图像像素**:逐行逐列遍历图像中的每个像素,获取其灰度值,然后在直方图数组中对应的索引位置加一。 4. **绘制直方图**:有了灰度直方图的数据,可以使用绘图库(如Matplotlib在Python中,或者自己编写...
在"Visual+C++数字图像处理-谢凤英-源代码"这个资源中,你可能会找到上述部分或全部知识点的实现。通过学习和理解这些源代码,你可以深入掌握图像处理的实践技巧,并且有机会拓展到更复杂的图像处理任务,比如对象...
《Visual C++数字图像处理典型算法及实现(第2版源代码)》是张宏林先生的一本专著,主要面向对计算机视觉和图像处理感兴趣的读者,尤其是那些希望使用C++编程语言进行图像处理实践的开发者。这本书深入浅出地介绍了...
这个名为"图像处理作业C++源代码"的压缩包很可能是为了教学或实践目的而设计的一系列代码示例,涵盖了图像处理的多个重要方面。下面我们将详细探讨这些知识点。 1. 图像基础:在C++中,图像通常被表示为二维数组,...
Visual c++数字图像处理典型算法及实例源代码,内容包括: 源码目录结构图、256色转灰度图、Hough变换、Walsh变换、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像...
总的来说,这个“图像匹配的经典C++源代码”资源为学习者提供了一个宝贵的实践平台,通过它,你可以深入理解图像处理和计算机视觉的核心概念,并且能够灵活地应用于实际项目中。无论你是初学者还是经验丰富的开发者...
总的来说,"C++图像伪彩色处理源代码"是一个学习和研究图像处理技术的好素材,可以帮助开发者深入理解灰度图像与彩色图像之间的转换,以及如何在C++环境中实现这种转换。通过实际操作,可以提升对图像处理算法的理解...
通过这些源代码,你可以深入理解图像处理的核心原理,并提升自己的编程能力。 首先,C语言作为底层编程的基础,它的效率高且对内存管理有直接控制权,非常适合处理大量的图像数据。C++则在此基础上增加了面向对象的...
《Visual C++数字图像处理源代码》是一本由电子工业出版社出版的专业图书,由谢凤英和赵丹培两位专家主编。这本书的核心内容是通过Visual C++编程语言,讲解如何进行数字图像处理,旨在帮助读者深入理解图像处理原理...
"cpplibs-0.2b-20031008"压缩包中的源代码提供了一个C/C++实现的LBP库,这使得开发者能够方便地在项目中集成LBP算法。这个库可能包含以下关键组件: 1. **头文件**:定义了LBP相关的数据结构、函数原型和常量,如`...