• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Matlab
  • 标签: matlab  

资源简介

基于多频外差原理的仿真,代码通过matlab可以直接运行

资源截图

代码片段和文件信息

% 测试多频外差原理
% 模拟程序
% 图像尺寸 1024×768
% 共4张/组×3组=12张图
% 3组频率依次为1/701/641/59
% 本程序基于李中伟的博士论文来实现
% 《基于数字光栅投影的结构光三维测量技术与系统的研究》

% 程序开始
clc;
close all;
clear;

% 图片的初始化
width = 1024;  
heigth = 768;

% 三频率
% 这个可以参见李中伟的博士论文
freq = [70 64 32 16];

% 利用分块矩阵C存储3组共计12张图
% 三种频率,四组相位
C = cell(44);  
for i=1:4
    for j=1:4
        C{ij} = zeros(heigthwidth);
    end
end

% 利用余弦函数计算12张图的灰度值
% 图像的生成
% 三种频率,四组相位
for i = 1:4 % 对应三种不同的频率
    for  j = 0:3 % 对应四种相位
        for k = 1:width
            C{ij+1}(:k) = 128+127*sin(2*pi*k*freq(i)/width+j*pi/2);
        end
    end
end

% 对灰度值进行归一化处理
for i = 1:4
    for j = 1:4
        C{ij} = mat2gray(C{ij});
    end
end

% 显示12张图
for i = 1:4
    for j = 1:4
         n = 4*(i-1)+j;
         h = figure(n);
         imshow(C{ij});
     end
 end

% 初始化三组处理后的图片灰度矩阵
% phi也是分块矩阵
% 存储相位主值图像
phi = cell(41);
for i = 1:4
    phi{i1} = zeros(heigthwidth);
end

% 求取相位差
% 计算每种频率对应的相位主值
% 输出三种频率的相位主值,用于相差计算
for i = 1:4 % 对于3组中的每一组图片
     I1 = C{i1};
     I2 = C{i2};
     I3 = C{i3};
     I4 = C{i4};
      for g = 1:heigth
          for k = 1:width          
            if I4(gk)==I2(gk)&&I1(gk)>I3(gk) %四个特殊位置
                    phi{i1}(gk)=0;
            elseif I4(gk)==I2(gk)&&I1(gk)                    phi{i1}(gk)=pi; 
            elseif I1(gk)==I3(gk)&&I4(gk)>I2(gk) %四个特殊位置
                    phi{i1}(gk)=pi/2;
            elseif I1(gk)==I3(gk)&&I4(gk)                    phi{i1}(gk)=3*pi/2;
            elseif I1(gk)                    phi{i1}(gk)=atan((I4(gk)-I2(gk))./(I1(gk)-I3(gk)))+pi;
            elseif I1(gk)>I3(gk)&&I4(gk)>I2(gk) %第一象限
                    phi{i1}(gk)=atan((I4(gk)-I2(gk))./(I1(gk)-I3(gk)));
            elseif I1(gk)>I3(gk)&&I4(gk)                    phi{i1}(gk)=atan((I4(gk)-I2(gk))./(I1(gk)-I3(gk)))+2*pi;  
            end
          end             
     end
end
  
% 计算相差

评论

共有 条评论