图像亮度和对比度
图像亮度和对比度的调整操作,其实属于图像处理变换中比较简单的一种——点操作(pointoperators)。点操作有一个特点:仅仅根据输入像素值(有时可以加上某些全局信息或参数),来计算相应的输出像素值。这类算子包括亮度(brightness)和对比度(contrast)调整、颜色校正(colorcorrection)和变换(transformations)。
两种最常用的点操作(点算子)是乘上一个常数(对应对比度的调节)以及加上一个常数(对应亮度值的调节)。公式如下:
g ( x ) = a ∗ f ( x ) + b
参数f(x)表示源图像像素
参数g(x)表示输出图像像素
参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度
参数b通常被称为偏置(bias),常常被用来控制图像的亮度。
static void on_ContrastAndBright(int, void *)
{
namedWindow("src", 1);
//三个for循环,执行运算 g_dstImage(i,j) = a*g_srcImage(i,j)+b;
for(int y = 0; y < g_srcImage.rows; y++){
for(int x = 0; x < g_srcImage.cols; x++){
for(int c = 0; c < 3; c++){
//图像变量名.at<元素类型>(行,列)[通道]
g_dstImage.at<Vec3b>(y,x)[c] =
saturate_cast<uchar>((g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>
(y,x)[c]) + g_nBrightValue);
}
}
}
imshow("src", g_srcImage);
imshow("dst", g_dstImage);
}
直方图均衡化
图像的直方图是什么?
直方图是图像中像素强度分布的图形表达方式.
它统计了每一个强度值所具有的像素个数.
直方图均衡化是什么?
直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法.
说得更清楚一些, 以上面的直方图为例, 你可以看到像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围. 见下面左图: 绿圈圈出了 少有像素分布其上的 强度值. 对其应用均衡化后, 得到了中间图所示的直方图. 均衡化的图像见下面右图.
官方示例