Gamma校正:校正塞规、校正环规供应商?

 2021-07-09 23:15    77  

请在百度搜索里输入:东莞聚宣社模具制品有限公司
找到我司的网站Gamma校正,通过网站里的联系方式与我们联系
我们将热情为您解答~!
标准环规、螺纹环规、塞环规、硬质合金环规、英制环规、光滑环规、英制螺纹环规、光面环规、螺纹塞环规、美制环规、校正环规、校对专业环规、测试环规、光滑极限环规、标准环规、非标准环规定做
光滑塞规、锥度塞规、钢制塞规、英制塞规、螺纹塞规、极限塞规、螺纹环塞规、标准塞规、非标准塞规定做、光面塞规、A塞规、B塞规

扫描仪怎样使用扇区校正进行颜色校正?

  色轮由六个扇区组成,分别代表C、M、Y、R、G、B六种颜色,每种颜色代表的扇区占色轮所代表的扇区的六分之一即60°Gamma校正。沿着色轮圆周的方向色相发生改变,H表示色相的改变量,C表示饱和度的改变量,L表示亮度的改变量。扇区校正与其他局部校正方法不同的是:扇区校正仅对C、M、Y、G、R、B六种纯色起作用,对饱和度低的灰色或者中性灰不起作用,因此扇区校正只影响图像的色彩度,而不影响图像的灰平衡。
  检查图像的层次需利用专业工具,如Ph0tosh0PJmagePaint2等图像处理软件,这些软件中的吸管工具都可检查图像的层次,尤其适用于检查高光区和暗调区的层次。如果高光区和暗调区出现大片相同数值的白色、黑色,或数值变化幅度非常小,说明图像层次较差。
  利用Photoshop中的"Level功能",从色阶分布图中也可以检查出图像质量的好坏,左边出现大量的暗像素,表明整幅图像偏暗;如果右边出现大量的亮像素,则表明整幅图像偏亮次分明,色阶分布图十分均匀。

OpenCV Gamma 校正原理和功能实现

1.什么是Gamma校正Gamma校正是对输入图像灰度值进行的非线性操作Gamma校正,使输出图像灰度值与输入图像灰度值呈指数关系:

Gamma校正:校正塞规、校正环规供应商?

Gamma校正:校正塞规、校正环规供应商?

这个指数即为Gamma.

Gamma校正:校正塞规、校正环规供应商?

经过Gamma校正后的输入和输出图像灰度值关系如图1所示,

Gamma校正:校正塞规、校正环规供应商?

Gamma校正:校正塞规、校正环规供应商?

Gamma 校正提供了一种输出非线性的映射机制。Gamma 值在 0.5 ~ 1 之间,图像暗处亮度提升,同时低灰度处的对比度得到增加,更利于分辨低灰度值时的图像细节;Gamma 值在 1 ~ 4 之间时,图像暗处亮度下降。

Gamma校正:校正塞规、校正环规供应商?

///////////////////////////////////

Gamma校正:校正塞规、校正环规供应商?

Gamma校正:校正塞规、校正环规供应商?

2.为什么进行Gamma校正2.1 为方便人眼辨识图像人眼对外界光源的感光值与输入光强不是呈线性关系的,而是呈指数型关系的。在低照度下,人眼更容易分辨出亮度的变化,随着照度的增加,人眼不易分辨出亮度的变化。而摄像机感光与输入光强呈线性关系。如图2所示:

人眼和摄像机的感光与实际输入光强的关系

为方便人眼辨识图像,需要将摄像机采集的图像进行gamma校正。

2.2 为能更有效地保存图像亮度信息未经Gamma校正和经过Gamma校正保存图像信息如下图所示:

未经Gamma校正和经过Gamma校正保存图像信息

可以观察到,未经Gamma校正的情况下,低灰度时,有较大范围的灰度值被保存成同一个值,造成信息丢失;同时高灰度值时,很多比较接近的灰度值却被保存成不同的值,造成空间浪费。经过Gamma校正后,改善了存储的有效性和效率。

3.OpenCV 实现Gamma 校正前面对Gamma变换的介绍,我们知道了 通过Gamma变换,可以调整图像的亮度,设置Gamma值,可以使图像变亮/暗。下面我们通过代码实现来演示一下效果。

OpenCV 的Gamma 变换的实现与LUT查找表的关联性很大,需要借助数学公式转换,这个可以了解一下。

unsigned char LUT[256];for (int i = 0; i < 256; i++){float f = (i + 0.5f) / 255;f = (float)(pow(f, kFactor));LUT[i] = saturate_cast<uchar>(f*255.0f - 0.5f);}LUT就是指显示查找表(Look-Up-Table),LUT(Look-Up Table)实际上就是一张像素灰度值的映射表,它将实际采样到的像素灰度值经过一定的变换,如阈值、反转、二值化、对比度调整、线性变换等,变成了另外一个与之对应的灰度值,这样可以起到突出图像的有用信息,增强图像的光对比度的作用。LUT(src, lut, dst);

OpenCV 实现Gamma 校正参考如下实现代码,

///////////////////Gamma 变换#include <opencv2\core\core.hpp>#include <opencv2\highgui\highgui.hpp>#include <opencv2\imgproc\imgproc.hpp>#include<cmath>/*参数1 Mat srcImage,输入图像参数2 Gamma系数的倒数返回值:通过Gamma 变换返回的图像*/Mat gammaTransform(Mat &srcImage, float kFactor){unsigned char LUT[256];for (int i = 0; i < 256; i++){float f = (i + 0.5f) / 255;f = (float)(pow(f, kFactor));LUT[i] = saturate_cast<uchar>(f*255.0f - 0.5f);}Mat resultImage = srcImage.clone();if (srcImage.channels() == 1){/////////灰度图MatIterator_<uchar> iterator = resultImage.begin<uchar>();MatIterator_<uchar> iteratorEnd = resultImage.end<uchar>();for (; iterator != iteratorEnd; iterator++){*iterator = LUT[(*iterator)];}}else{//////////彩色图MatIterator_<Vec3b> iterator = resultImage.begin<Vec3b>();MatIterator_<Vec3b> iteratorEnd = resultImage.end<Vec3b>();for (; iterator != iteratorEnd; iterator++){(*iterator)[0] = LUT[((*iterator)[0])];//b(*iterator)[1] = LUT[((*iterator)[1])];//g(*iterator)[2] = LUT[((*iterator)[2])];//r}}return resultImage;}int main(){Mat srcImage = imread("corridor.jpg");if (!srcImage.data){printf("could not load image...\n");return -1;}//取两种不同的gamma值float gamma1 = 3.33f;float gamma2 = 0.33f;float kFactor1 = 1 / gamma1;float kFactor2 = 1 / gamma2;Mat result1 = gammaTransform(srcImage, kFactor1);Mat result2 = gammaTransform(srcImage, kFactor2);imshow("srcImage", srcImage);imshow("result1", result1);imshow("result2", result2);waitKey(0);return 1;}效果图:

原图

Gamma=4.0 的效果图,

Gamma=0.25的效果图,

从效果图可以看出经过Gamma变换的图像可以明显的改变图像的亮度并增强对比度。这种处理方法在处理比较暗的图像时效果更明显。

End

本文标签:哪些Spring核心嵌套循环详解

原文链接:https://www.xgfox.com/jsyd/737.html

本文版权:如无特别标注,本站文章均为原创。