四步相移法求主值

计算相位函数:

代码:

void MultifrequencyHeterodyeMethod::fourStepPhaseShifting(cv::Mat grating_img[])//四步相移法
{cv::Mat PhasePrincipalValuePicture_temp[3] ={cv::Mat::zeros(grating_rows, grating_cols, CV_8UC1),cv::Mat::zeros(grating_rows, grating_cols, CV_8UC1),cv::Mat::zeros(grating_rows, grating_cols, CV_8UC1)};uchar* p[12] = { NULL };for (int y = 0; y < grating_rows; ++y)//图像行遍历{for (int img_num = 0; img_num < 12; ++img_num){p[img_num] = grating_img[img_num].ptr<uchar>(y);}//遍历12幅图for (int x = 0; x < grating_cols; ++x)//图像列遍历{double phaseValue1_temp = atan2((double)(p[3][x] - p[1][x]), (double)(p[0][x] - p[2][x]));//3-1 0-2if (phaseValue1_temp >= 0)PhasePrincipalValuePicture[0].at<double>(y, x) = phaseValue1_temp;elsePhasePrincipalValuePicture[0].at<double>(y, x) = phaseValue1_temp + CV_PI * 2;double phaseValue2_temp = atan2((double)(p[7][x] - p[5][x]), (double)(p[4][x] - p[6][x]));//7-5 4-6if (phaseValue2_temp >= 0)PhasePrincipalValuePicture[1].at<double>(y, x) = phaseValue2_temp;elsePhasePrincipalValuePicture[1].at<double>(y, x) = phaseValue2_temp + CV_PI * 2;double phaseValue3_temp = atan2((double)(p[11][x] - p[9][x]), (double)(p[8][x] - p[10][x]));//11-0 8-10if (phaseValue3_temp >= 0)PhasePrincipalValuePicture[2].at<double>(y, x) = phaseValue3_temp;elsePhasePrincipalValuePicture[2].at<double>(y, x) = phaseValue3_temp + CV_PI * 2;PhasePrincipalValuePicture_temp[0].at<uchar>(y, x) = PhasePrincipalValuePicture[0].at<double>(y, x) / (2 * CV_PI) * 255;PhasePrincipalValuePicture_temp[1].at<uchar>(y, x) = PhasePrincipalValuePicture[1].at<double>(y, x) / (2 * CV_PI) * 255;PhasePrincipalValuePicture_temp[2].at<uchar>(y, x) = PhasePrincipalValuePicture[2].at<double>(y, x) / (2 * CV_PI) * 255;}}//三张不同频率的主值图cv::namedWindow("PhasePrincipalValuePicture[0]", 0);cv::resizeWindow("PhasePrincipalValuePicture[0]", cv::Size(800, 600));cv::imshow("PhasePrincipalValuePicture[0]", PhasePrincipalValuePicture_temp[0]);cv::namedWindow("PhasePrincipalValuePicture[1]", 0);cv::resizeWindow("PhasePrincipalValuePicture[1]", cv::Size(800, 600));cv::imshow("PhasePrincipalValuePicture[1]", PhasePrincipalValuePicture_temp[1]);cv::namedWindow("PhasePrincipalValuePicture[2]", 0);cv::resizeWindow("PhasePrincipalValuePicture[2]", cv::Size(800, 600));cv::imshow("PhasePrincipalValuePicture[2]", PhasePrincipalValuePicture_temp[2]);cv::waitKey(500);
}

atan2的含义:
C 语言里 double atan2(double y,double x) 返回的是原点至点(x,y)的方位角,即与 x 轴的夹角。返回值的单位为弧度,取值范围为(-π, π]。结果为正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度。若要用度表示反正切值,请将结果再乘以 180/π。另外要注意的是, 函数atan2(y,x)中参数的顺序是倒置的,atan2(y,x)计算的值相当于点(x,y)的角度值。

运行结果:

频率1主值图:

频率2主值图:

频率3主值图:

参考博客:

三维重建之条纹投影结构光(二)——四步相移+三频外差法_beyond951的博客-CSDN博客_三频外差

atan2相关知识汇总_sxl545的博客-CSDN博客_atan2

多频外差法(三频四步相移)相关推荐

  1. 相位测量轮廓术PMP+相移方法(三维测量——三、四步相移)

    这篇也是我开始学习结构光--三维测量时的一个引导文章,也很感谢作者在我后期的学习中的指导. FTP和PMP 根据我看的文献,PMP方法应该是1984年由Srinivasan等人提出的.FTP是利用傅里 ...

  2. 三维重建之条纹投影结构光(二)——四步相移+三频外差法

            接上文: 三维重建之条纹投影结构光(一)https://blog.csdn.net/beyond951/article/details/123361852?spm=1001.2014. ...

  3. 3.6总结半年来的专业学习——图像处理、光栅投影、四步相移、多频外差,从matlab入门到opencv入门

    2019.9.17 研究生导师定了,老师给了一些论文,并推荐了几本书 1.计算机辅助光学测量/金观昌著 作者是在美国奥克兰大学杨老师实验室做过访问学者,所以书的内容和实验室的研究方向非常切合 2.基于 ...

  4. 结构光三维重建1——四步相移原理

    一.简介 结构光三维重建主要的原理就是从投影仪中投影出特定图案的结构光,然后通过对多组结构光的分析计算,得到投影仪像素与相机像素的对应关系,进而通过事先标定好的系统参数,实现所拍物体的三维重建. 下面 ...

  5. 四步相移法怎么获得相位信息_不一样的费曼学习法!|高中篇|”

    01 大家有没有遇到这种情况,老师讲课时,带着大家一起解题的时候,你感觉自己学会了. 可是等到自己做题时,却总是感觉又不会了.只是模糊的记得一些解题步骤,但是中间的细节却又不太明了. 你的学霸同学教你 ...

  6. 四步相移法怎么获得相位信息_如何拥有超强的学习能力?世界公认的费曼学习法了解一下...

    我们都听说过"方法比努力更重要"这句话,在孩子的学习过程中,用错了方法会浪费大量的时间,一个好的方法能够事半功倍. 比如孩子记了笔记却不复习,和不记笔记是一样的,如果将知识理解后再 ...

  7. 四步相移法怎么获得相位信息_涨知识!5G的调制方式,到底是怎么实现的?

    本文来源:微信公众号中兴文档大家好,今天我们来聊聊调制.说到调制,我想很多同学马上会联想到这些关键词:BPSK.QPSK.调幅.调相.QAM.星座图--众所周知,调制和解调是通信基本业务流程中的重要组 ...

  8. 结构光N步相移+多频外差法之解相位:三频四相

    结构光N步相移+多频外差法之解相位:三频四相 四步相移 多频外差 四步相移 光强公式: I为像素xy位置接收到的光强,a为背景,b是调制(modulation),来自于投影仪的光强亮度,cos部分,第 ...

  9. 多步相移法获取绝对相位(多频外差法)

    1.四步相移法获取绝对相位 #define PI 3.1415926 #define step 4 //步数 #define res_x 1024 //分辨率 #define res_y 768 #d ...

最新文章

  1. Python使用matplotlib可视化自定义背景色实战:自定义可视化图像的背景色(Background Color)
  2. go python php 压力测试_pyLot 基于python的压力测试工具
  3. linux下基于apache下的svn的搭建
  4. DeviceToken 获取失败,原因:Error Domain=NSCocoaErrorDomain Code=3000 未找到应用程序的“aps-environment”的授权字符串......
  5. eclipse 设置 content type 编码格式
  6. 测试点4错的来:1029 旧键盘 (20分)
  7. mysql升级5.5
  8. C#通过Kernel32.dll动态调用C++生成dll相关接口(结构体转换)相关问题整理
  9. 普通的人改变结果,优秀的人改变原因,顶级优秀的人改变模型
  10. java用于保存登录对象怎么写,利用对象流模仿登陆注册功能——Java对象流应用...
  11. 高质量C /C编程指南---序言
  12. python 新手常见问题
  13. Java 实现JSON字符串、JSON对象和Java对象的相互转换(fastjson)
  14. GBK编码和UTF-8编码区别各所占用字节数
  15. ele input事件 输入后0.5秒触发
  16. 【预测模型】预测某地区未来 20 年的人口结构变化趋势(灰色预测模型)
  17. 作为一本书,我是如何把别的Java系列卷死的!
  18. C++高阶 类型转换函数最透彻的一篇文章
  19. 超级好用的小程序版蓝牙调试工具:Ble蓝牙开发助手
  20. Qt: 表格(QTableWidget)隐藏自动生成的序号列(行头)

热门文章

  1. 谈谈对“周日焦虑症”的看法
  2. 《大教堂与集市》读书笔记
  3. 要以一种平和的心态对待那些“可爱”的木马病毒
  4. Unity 3D专栏 U3D预制包,很好很强大 (二)
  5. 信息学奥赛一本通T1453:移动玩具
  6. Vue脚手架html2canvas生成图片
  7. web前端html+css+js 简单模仿敲木鱼
  8. Redis 学习笔记(1)—— Redis安装,String 类型测试
  9. 171023—各进制数输出:二进制转换用格式控制符输出八,十,十六进制数
  10. python批量整理地籍项目的文件夹