光栅投影中Gamma校正

光栅投影中Gamma校正学习郑东亮达飞鹏《提高数字光栅投影测量系统精度的gamma校正技术》一文后,对其中的关键技术进行了解析。摄像机获得的实际灰度图像:其中是整个系统的gamma值,是预编码值(需要根据实验进行选择),是幅度调制(保证归一化),是背景光强,和是由系统确定的值(需要通过投射不同的灰度图进行解算)。gamma校正的目的:选择一个合适的预编码值,使得,从而使系统的gamma失真得以消除或者减…

大家好,又见面了,我是你们的朋友全栈君。

学习 郑东亮 达飞鹏 《提高数字光栅投影测量系统精度的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校正后的灰度图像了。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150597.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 大一c语言图书管理系统_基于java的图书管理系统

    大一c语言图书管理系统_基于java的图书管理系统C课程设计——图书管理系统1、题目意义图书馆,作为文献的聚集地和展示平台,常常扮演着引领文化前进的角色,是每个大学不可或缺的基础设施,而图书管理系统则是一个图书馆能够正常运转的关键。本次课程设计使用C语言制作程序来实现图书的登记,删除,查询,浏览以及读者的借阅,还书,会员登录,修改密码等功能。程序中涉及到数据链表和文件指针的操作,包括结构体数据定义,使用及文件的读写,定位,修改等。2、设计思…

    2022年10月11日
  • 双机热备解决方案(mysql双机热备方案)

    数据库双机热备有两种典型的方式,一种是比较标准的,两台服务器通过一个共享的存储设备(一般是共享的磁盘阵列或存储区域网SAN),并且安装双机软件,实现双机热备,称为共享方式。另一种方式是通过纯软件的方式,一般称为镜像的方式…

  • django捕获DoesNotExist

    django捕获DoesNotExistfromdjango.core.exceptionsimportObjectDoesNotExisttry:user=User.objects.get(id=12873)exceptObjectDoesNotExist:print”user”

    2022年10月22日
  • 小程序列表跳转至详情_小程序跳转链接怎么获取

    小程序列表跳转至详情_小程序跳转链接怎么获取效果展示:列表页js部分:onLoad:function(options){varthat=this;wx.request({url:’你的接口’,data:{ 接口参数},header:{‘content-type’:’ap…

  • qtcpsocket多线程_qtcpsocket接收数据

    qtcpsocket多线程_qtcpsocket接收数据简述最近在写有关网络传输的项目,使用了Qt封装的QTcpSocket,但是发现很多的跨线程导致死机的问题,也许是我了解的不够深入吧。最开始是自己继承一个线程然后把套接字传递到线程使用遇到程序崩溃;否决后使用了QObject::moveToThread()的方式,虽然程序可以正常发送接收数据但是对于QTcpSocket(moveToThread后属于子线程)与主线程的交互并不是很友好,还是存在一些问题;最后是考虑到了QTcpSocket跨线程崩溃说明它本身内置了一些发送或者接收的线程,这样…

  • [java] java全局变量 声明和定义[通俗易懂]

    [java] java全局变量 声明和定义[通俗易懂]参考:https://blog.csdn.net/lilil371324/article/details/51241580JAVA全局变量:静态变量,实例变量(即在类体中定义的变量),静态变量:staticinta=3;实例变量:intb=5全局变量不能在类体中先声明(定义)后赋值但静态变量可以先在类体中声明,然后在方法中赋值(当然实例变量是不行的)publicclassTest{staticinta;//在类体中声明整型静态变量a。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号