光栅投影中Gamma校正

article/2025/10/16 3:19:13

学习 郑东亮 达飞鹏 《提高数字光栅投影测量系统精度的gamma校正技术》一文后,对其中的关键技术进行了解析。

摄像机获得的实际灰度图像:I_{c}^{i}=c_{1}(I_{s}^{i})^{\gamma _{a}/\gamma _{p}+\gamma _{b}}}}}}}+c_{2}}

其中{\gamma _{a}/\gamma _{p}+\gamma _{b}}=\gamma^{​{}'}是整个系统的gamma值,\gamma_{p}是预编码值(需要根据实验进行选择),c_{1}是幅度调制(保证I^{i}_{s}归一化),c_{2}是背景光强,\gamma_{a}\gamma_{b}是由系统确定的值(需要通过投射不同的灰度图进行解算)。

gamma校正的目的:选择一个合适的预编码值\gamma_{p},使得\gamma^{'}=1,从而使系统的gamma失真得以消除或者减小。

-----------------------------------------

如何求解上述的\gamma^{​{}'}呢?

可以通过投射不同的灰度图,因为投射灰度图的灰度值已知,获取的灰度图的灰度值也已知,可以联立方程组求解只含有一个未知数的超越方程(可以采用寻优算法得到未知数的最佳值)。

超越方程组:\frac{I^{c}_{1}-I^{c}_{2}}{I^{c}_{1}-I^{c}_{3}}=\frac{(I^{s}_{1})^{\gamma^{​{}'}}-(I^{s}_{2})^{\gamma^{​{}'}}}{(I^{s}_{1})^{\gamma^{​{}'}}-(I^{s}_{3})^{\gamma^{​{}'}}}

寻优目标函数:f(\gamma^{​{}'})=\frac{I^{c}_{1}-I^{c}_{2}}{I^{c}_{1}-I^{c}_{3}}-\frac{(I^{s}_{1})^{\gamma^{​{}'}}-(I^{s}_{2})^{\gamma^{​{}'}}}{(I^{s}_{1})^{\gamma^{​{}'}}-(I^{s}_{3})^{\gamma^{​{}'}}}

得到\gamma^{​{}'}后,可以根据{\gamma _{a}/\gamma _{p}+\gamma _{b}}=\gamma^{​{}'}解出\gamma_{a}\gamma_{b}(当然,需要利用寻优算法寻找到两个最佳的\gamma^{​{}'}

得到\gamma_{a}\gamma_{b}后,令\gamma^{​{}'}为1,再解出最终的预编码值\gamma_{p}

-----------------------------------------

如何选择合适的预编码值?

这部分内容是与传统的方法进行对比,找到一个可以使相位误差与传统方式得到的误差最为接近时的预编码值,可以试错,也可以猜想一个不太离谱的值,然后取其一定范围的值群,最后进行实验的对比。

这部分内容感觉有点怪怪的,看似不符合一般科学实验的规则。。。但是这种方式带有逆向思维的处理方法非常的独到!通过猜想,然后验证猜想,找到真理!

-----------------------------------------

灰度响应范围如何确定?

这部分内容可以通过投射不同灰度级的图像进行分析,得到一个合适的灰度级范围。

-----------------------------------------

后续操作

确定好了灰度级范围后,就可以选取3种不同灰度值作为计算机的输入图像灰度值(归一化到I^{s}_{i}),这样就可以正常投射灰度图像了,然后再根据上述的步骤一步步的确定参数。

这里有个技巧,是初始化预编码值,根据预编码值,得到确定的灰度响应函数,然后计算\gamma^{​{}'}\gamma_{a}\gamma_{b},以及最后的\gamma_{p}

-----------------------------------------------------------------------------

上述方法的好处在于可以投影很少的灰度图像得到系统的gamma值。在得到gamma值后,可以根据灰度响应函数,建立LUT,后面再对理论的灰度图像进行校正,最后让投影仪投射到待测物体上,那么摄像机获取到的图像就是经过gamma校正后的灰度图像了。

 

 


http://chatgpt.dhexx.cn/article/9Fghgelf.shtml

相关文章

java opencv gamma_Gamma校正及其OpenCV实现

一、什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: [2] 这个指数即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如图1所看到的:横坐标是输入灰度值&#x…

gamma校正 matlab,Gamma校正 ——图像灰度变化 OpenCV (十)

Gamma校正(C++、OpenCV实现) 1.作用: Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: 伽玛校正由以下幂律表达式定义: 2.函数原型 void calcHist( const Mat* images, int nimages, const int* channels, InputArray mask, Out…

图像Gamma(伽玛)校正的原理及OpenCV代码实现

什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系。 Gamma校正的原理表达式如下: 上面中的指数γ即为Gamma。这就是Gamma校正的名称来历。 其中的取值范围是0~1,最重…

Gamma校正

下面是自己所整理的一些gamma校正的东西如有侵权请联系删除。 Gamma矫正: 伽马矫正也称幂律变换,一般用于平滑的扩展暗调的细节。 进行伽马矫正的原因是人类的眼睛在感知光线时,眼睛对亮度的感知遵循近似的幂函数(如图&#xf…

图像Gamma校正

1. gamma校正的起因:人眼感知光线的特殊性 对于现实世界的光的强度来说,描述光的强弱,是根据光子在单位面积上的光子数量来描述的,这是物理规则,这是没错的,光的亮度(强度)是和光子数…

Gamma校正原理及实现

gamma校正原理:   假设图像中有一个像素,值是 200 ,那么对这个像素进行校正必须执行如下步骤:   1. 归一化 :将像素值转换为 0 ~ 1 之间的实数。 算法如下 : ( i 0. 5)/256 这里包含 1 个除法和 1…

python手撕分水岭算法

python手撕分水岭算法 1 分水岭算法实现 主要思路就是: 利用一个优先队列与有序队列(有序队列其实可以不用)。优先队列是按像素的灰度值排列的,灰度值低的先被淹。通过统计像素的附近的点的标记种类个数来确认当前像素点的标记…

分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分支,它从同一物体的两张不同图像提取三维信息。 极几何的工作原理&#x…

分水岭算法-python-opencv

分水岭算法简单原理: 对于一个图像的灰度值,将图像放平,可以看成是类似与山谷与山顶的图像,灰度值小的就是山底。先找到若干个山底,同时加水,当加到一定程度时候,某些山顶会被淹没,…

分水岭算法解析[halcon]

分水岭算法 分水岭算法是根据分水岭的构成来考虑图像的分割, 它是—种基于拓扑理论的数学形态学的分割方法。 首先, 把一幅图像看作起伏的地形, 图像的每像素灰度值作为这个地形的高度, 极小值是盆地, 极大值为山脊。…

opencv-分水岭算法图像分割

分水岭算法图像分割 目标   本节我们将要学习   • 使用分水岭算法基于掩模的图像分割   • 函数:cv2.watershed()    原理   任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山…

分水岭算法的python实现及解析

1 算法简介 分水岭算法的原理很容易查到,但是很多文章都是直接用的opencv或matlab函数,看不到具体实现方法,这篇文章希望能对大家有点帮助。 分水岭算法就是往山谷中注水,把不同湖水接触的位置称作分水岭,这么做的结…

opencv28:分水岭算法的图像分割

目标 在本章中,将学习 使用分水岭算法实现基于标记的图像分割函数:cv2.watershed() 理论 任何灰度图像都可以看作是一个地形表面,其中高强度的像素表示山峰,低强度表示山谷。可以用不同颜色的水(标签)填充每个孤立的山谷(局部…

OpenCV-分水岭算法

文章目录 分水岭算法cv2.watershed示例 分水岭算法 任何灰度图像都可以看作是一个地形表面,其中高强度表示山峰,低强度表示山谷。你开始用不同颜色的水(标签)填充每个孤立的山谷(局部最小值)。随着水位的上升,根据附近的山峰(坡度)&#xff…

【OpenCV】- 分水岭算法

文章目录 什么是图像分割分水岭算法1、实现分水岭算法:watershed()函数2、处理流程(视频)3、示例程序(书中) 什么是图像分割 将图像中像素根据一定的规则分为若干个cluster集合,每个集合包含一类对象 如下…

OpenCV分水岭算法详解

原理分析 分水岭算法主要用于图像分段,通常是把一副彩色图像灰度化,然后再求梯度图,最后在梯度图的基础上进行分水岭算法,求得分段图像的边缘线。 下面左边的灰度图,可以描述为右边的地形图,地形的高度是由…

分水岭算法 matlab实现

背景 做图像分割的时候用到了,就学习了一下 大概思想 把图像中的像素大小理解成山地的海拔,向山地灌水,海拔低的地方会积水,这些地方称之为谷底。随着水位上升,不同谷底的水会相遇,相遇的地方就是分水岭。…

分水岭算法c语言,Opencv分水岭算法学习

分水岭算法可以将图像中的边缘转化成“山脉”,将均匀区域转化为“山谷”,这样有助于分割目标。 分水岭算法是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中的每一点像素的灰度值表示…

分水岭算法

引言:它是基于拓扑理论的形态学处理方法。将一张图像假想成为一张地貌特征图。 原理理解:灰度图被看作拓扑平面,灰度高看成山峰,灰度低看成山谷。从山谷开始注水,随着水位升高水流会相遇汇合。为了防止汇合&#xff0…

Opencv分水岭算法——watershed自动图像分割用法

分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭算法的一个重要特征。 其他图像分割方法,如阈值,边缘检测等都不会考虑像素在…