Matlab生成正弦条纹图-------N( 四)步相移正弦条纹图及三维重建示例-程序员宅基地

技术标签: matlab  计算机视觉  

初学相移条纹三维重建,想试试用matlab做一下仿真,结果先被拦在了第一关--------生成正弦条纹图。

我看网上好多教程都是直接用图片计算相位了

所以分享一段代码,仅供初学者参考,个人觉得能够更好的理解。若有不正确之处,还望多多指点,勿怪。

代码如下:

close all; 
clc;
clear;
%% ------参数
W = 700; 
H = 700;
A = 127.5;
B = 127.5;   %127.5+127.5=255
d = 20;%相机-投影的距离
l = 100;%相机到标定板的距离
T = 15; %T=1/f
N=4;%相移次数
[x, y] = meshgrid(1:W, 1:H);
I = cell(2, 4);
%% ---创建一个物体(def)
def=peaks(W);
figure;
mesh(x,y,def);
%% ******(N)步相移条纹图
pha = 2 * pi * x / T;

% pha = linspace(0,N*2*pi,H); 
% pha = repmat(pha',1,W); %横向条纹

% pha = linspace(0,N*2*pi,W); 
%pha = repmat(pha,H,1); %竖向条纹
%以上两类相位函数都可生成

    I1 = A + B * cos(pha + 0 *2* pi / N );%原始条纹
      I2 = A + B * cos(pha + 1 *2* pi / N );
        I3 = A + B * cos(pha + 2 *2* pi / N );
          I4 = A + B * cos(pha + 3 *2* pi / N );
    I{1, 1} = I1; % 记录光强
    I{1, 2} = I2; 
    I{1, 3} = I3; 
    I{1, 4} = I4; 
    figure; % 弹出窗口
    imshow(I1, []); % 图像显示
     title('条纹图1');
    figure; % 弹出窗口
    imshow(I2, []); % 图像显示
     title('条纹图2');
    figure; % 弹出窗口
    imshow(I3, []); % 图像显示
     title('条纹图3');
    figure; % 弹出窗口
    imshow(I4, []); % 图像显示
     title('条纹图4');


    Ib1 = A + B * cos(pha + 0 *2* pi / N + def);%变形条纹
       Ib2 = A + B * cos(pha + 1 *2* pi / N + def);
         Ib3 = A + B * cos(pha + 2 *2* pi / N + def);
            Ib4 = A + B * cos(pha + 3 *2* pi / N + def);
    I{2, 1} = Ib1; % 记录光强
    I{2, 2} = Ib2; 
    I{2, 3} = Ib3; 
    I{2, 4} = Ib4; 
    figure; % 弹出窗口
    imshow(Ib1, []); % 图像显示
    title('变形条纹图1');
    figure; % 弹出窗口
    imshow(Ib2, []); % 图像显示
    title('变形条纹图2');
    figure; % 弹出窗口
    imshow(Ib3, []); % 图像显示
    title('变形条纹图3');
    figure; % 弹出窗口
    imshow(Ib4, []); % 图像显示
    title('变形条纹图4');
%% ———————————计算包裹相位
S=I4-I2;
C=I1-I3;
phar = atan2(C, S); %原条纹
figure;
imshow(phar, []);
title('未变形的包裹相位图');

S1=Ib4-Ib2;
C1=Ib1-Ib3;
phabr = atan2(C1, S1); %原条纹
figure;
imshow(phabr, []);
title('变形的包裹相位图');
%--------变形包裹相位变形曲线
row_data1 = phabr(H/2, :);
figure;
plot(row_data1);
xlabel('列');
ylabel('相位值');
title('变形条纹包裹相位的变化');
%% ————————解包裹(求绝相位)
 phax1=unwrap(phar);%原条纹的
 phax2=unwrap(phabr);%变形后的
 phax=phax2-phax1;

figure;
imshow(phax, []);
title('绝对相位');%绝对相位

figure;
mesh(x, y, phax);
title('三维重建');%def三维

解包裹用的是unwrap,具体参照官网上的解释:

相位解包裹或解包裹是一个过程,通常用于重建信号的原始相位。解包裹算法在每个相位输入中添加适当的2π倍数,以恢复原始相位值,如图所示。详细信息,参见解包裹方法。

计算信号相位的算法通常只输出-π和π之间的相位。例如,这些算法计算sin(2π + 3)的相位为3,因为sin(3) = sin(2π + 3),并且因为实际的相位2π + 3不在-π和π之间。这样的算法将sin(-4π + 3)和sin(16π + 3)的相位也计算为3。

生成的三维形面:

 生成的条纹图:

 变形后:

包裹相位的曲线:

 展开相位:

 三维重建:

目前遇到的问题:

①若选择第一种(pha = 2 * pi * x / T;)则会出现,改变T值对绝对的相位的展开有很大的影响,图示T=15时效果最佳(似乎与unwrap的解法有关,我也没有计算验证);

②对三维形的重建时,高度不一致是因为没有还原高度“Z=phax*T*l/d/(2*pi);”

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_62628107/article/details/131576952

智能推荐

fpga在线升级 linux_Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程-程序员宅基地

文章浏览阅读834次。Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程一:前言最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linux在ARM9上的移植,网上基本都是ZC702、zed的教程,这对于买了非标准板的人来说就不太友好,很多文件都不知道是怎么生成的。本着学习加分享的心态,把这两天移植linux的过程写下来,尽可能详细。驱动和..._zynq 7035移植linux

c语言中合法的变量名 a0,自考计算机基础与程序设计.ppt-程序员宅基地

文章浏览阅读709次。《自考计算机基础与程序设计.ppt》由会员分享,可在线阅读,更多相关《自考计算机基础与程序设计.ppt(36页珍藏版)》请在装配图网上搜索。1、C语言概述,共 26 页 第 2 页,第二章 C语言概述,第一节 程序设计语言的发展 第二节 C语言的特点 第三节 C语言的组成 第四节 简单的C程序介绍 第五节 C程序的上机步骤 第六节 TC(Turbo C)介绍,共 26 页 第 3 页,2-1程序设..._c语言合法变量名称

Linux内核处理并发与竞争的方法之自旋锁API函数-程序员宅基地

文章浏览阅读846次,点赞24次,收藏19次。Linux内核处理并发与竞争的方法之自旋锁API函数

亚马逊美国站绑定万里汇WorldFirst收款教程!_wordfirst收款-程序员宅基地

文章浏览阅读2.1k次。万里汇WorldFirst是亚马逊主要的收款方式之一,下面就以美国站为例,说说如何设置WorldFirst作为亚马逊收款账户?你可以在WorldFirst账户后台“货币账户”里,找到“您的货币账户”信息,找到WorldFirst美国银行账户信息(WF美元帐户),包括银行所在国家、银行账户持有人姓名(账户名)、9位汇款路径号码(ABA Routing Number)、银行账号。如果您还没..._wordfirst收款

Linux系统下Oracle数据库的启动与Oracle监听的启动_linux启动oracle服务和监听-程序员宅基地

文章浏览阅读647次。Oracle数据库是一种常用的关系型数据库管理系统,而在Linux操作系统上,我们需要进行一些特定的步骤来启动Oracle数据库和Oracle监听器。在本文中,我们将详细介绍如何在Linux系统下启动Oracle数据库和Oracle监听器,并提供相应的源代码示例。请注意,以上步骤是基于默认的Oracle安装和配置。因此,在实际操作中,请参考相关文档和官方指南,并根据具体情况进行适当调整。通过以上步骤,你已成功启动了Oracle数据库和Oracle监听器。现在,Oracle监听器已成功启动。_linux启动oracle服务和监听

_GLIBCXX_USE_CXX11_ABI 定义不一致带来的宕机问题-程序员宅基地

文章浏览阅读3.7k次,点赞9次,收藏11次。@TOC很久没有写文章了,记录一下ABI 是什么我们看看wiki定义: 应用二进制接口(英语:application binary interface,缩写为ABI)是指两程序模块间的接口,一个ABI定义了机器代码如何访问数据结构与运算程序,此处所定义的界面相当低端并且相依于硬件。而类似概念的API则在源代码定义这些,则较为高端,并不直接相依于硬件,通常会是人类可阅读的代码。一个ABI常见的样貌即是调用约定:资料怎么成为计算程序的输入或者从中得到输出;x86的调用约定即是一个ABI...__glibcxx_use_cxx11_abi

随便推点

通用RPC方案-程序员宅基地

文章浏览阅读37次。其中ServerChannelInitializer的initChannel为触发read事件时,在SerializeAdapterDecoder的decode方法的最后一个中加入ServerChannelHandler 继承 ChannelInboundHandlerAdapter继续处理read事件时,在ServerChannelHandler 的channelRead方法中使用线程池来处理读到的数据(可能是耗时操作)从而来保证不会由于处理请求导致work线程全部耗尽,而出现等待的情况。

OpenCasCade 从零开始到生成MFC单文档测试程序_wnt_wdriver.hxx-程序员宅基地

文章浏览阅读5.9k次,点赞4次,收藏17次。1.下载1.1. 安装程序 OpenCASCADExxx.exe(xxx为最新版本号,下同): http://www.opencascade.org/getocc/download/loadocc/1.2.文档OCCTDocumentationxxx.exe(xxx为最新版本号,下同): http://www.opencascade.org/getocc/download/_wnt_wdriver.hxx

java - 设计模式学习总结_java设计模式结课报告总结-程序员宅基地

文章浏览阅读870次。熟练掌握各种设计模式,并能在实际编程开发中灵活运用它们,不仅能使代码更规范,重用性更高,同时也能保证代码的可靠性,提高开发效率。这段时间又系统看了设计模式的相关内容,整理学习总结如下,文中内容如有表达有误的地方,还请指出,共同交流学习。一、概述二、7个设计原则三、创建型模式(5种)四、结构型模式(7种)五、行为型模式(11种)六、总结一、概述面向对象编程有七大原则,即经常提到_java设计模式结课报告总结

解决浏览器报错 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location_webview报错vendor.1383dc26dbd21140b5be.js:6 uncaught-程序员宅基地

文章浏览阅读2.6k次。刷新页面报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: “/saleOrder/manage”.浏览器提示:<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning_webview报错vendor.1383dc26dbd21140b5be.js:6 uncaught (in promise) navigation

Linux中断处理程序框架_中断服务函数基本框架怎么写-程序员宅基地

文章浏览阅读463次。设备的中断会打断内核进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽量短小精悍。但是,这个良好的愿望往往与现实不吻合。在多数真实的系统中,当中断到来时,要完成的工作往往并不是短小的,它可能要进行大量的耗时处理。为了在中断执行时间尽量短和中断处理需完成的工作尽量大之间找到一个平衡点,Linux将中断处理程序分解为两个部分:顶半部(Top Half) 和底半部(Botton Half..._中断服务函数基本框架怎么写

《Photoshop智能手机APP界面设计》学习笔记_photoshop中app首面设计-程序员宅基地

文章浏览阅读5.9k次,点赞3次,收藏9次。第一章 APP用户界面基础1.1 手机UI设计相关基本概念1.1.1 什么是UI设计UI(User's Interface)即用户界面,它不仅仅是美化界面,还需要研究用户,让界面变得更友好、简洁、舒适、易用。用户界面无处不在。它可以是登录界面,也可以是软件界面,手机、PC上都有;1.1.2 手机UI与平面UI的不同手机UI将范围基本锁定在手机的APP/客_photoshop中app首面设计

推荐文章

热门文章

相关标签