摩尔条纹 原理以及matlab 实现

一、简介

莫尔条纹的形成原理-CSDN博客

“莫尔”一词源于法文“Moire”,其原本的含义是“波动”或者“起波纹的”。早在古代时期,人们便偶然发现,当把两块薄的丝绸织物相互叠加放置时,能够看到一种呈现不规则形态的花纹。此后,人们就把由两种条纹相互叠加而产生的图形命名为莫尔条纹。

在1874年的时候,英国著名的物理学家瑞利率先将莫尔条纹当作一种计量测试的手段,由此开创了莫尔测试技术这一崭新的领域。

从广义的范畴来讲,莫尔测试技术理应涵盖所有把莫尔图案作为计量测试手段的各类方法。不过,按照习惯上的说法,它通常是特指利用计量光栅元件来产生莫尔条纹的那一类计量测试方法,也就是我们常说的光栅莫尔条纹法。

时至今日,莫尔条纹已经在科学研究以及工程技术等诸多领域得到了极为广泛的应用。作为一种精密的计量手段,莫尔条纹可应用于测角、测长、测振等不同的专业领域当中。并且,随着光电子技术不断向前发展,莫尔条纹在自动跟踪、轨迹控制、变形测试以及三维物体表面轮廓测试等方面,同样有着十分广泛的应用。

简单的说就是:

莫尔条纹(Moire Pattern)是一种由两个周期性图案重叠时产生的干涉现象,表现为明暗相间的条纹。其原理基于光的干涉和周期结构的相互作用。

 

原本静止的条纹在移动另一个条纹的时候整个都动起来了 

莫尔条纹是什么?当栅格纸经过“图案”时,有趣的科学现象发生了_哔哩哔哩_bilibili

二、分类

 针对莫尔条纹的形成原理,已经发展出了多种理论,大致可归纳为以下三种:

一,基于遮光原理来阐释。该理论主张莫尔条纹的产生,是源于一块光栅的不透光线纹对另一块光栅透光缝隙产生的遮挡作用。所以,能够依据光栅副叠合线纹的交点轨迹,去呈现亮条纹的亮度分布情况。
二,基于衍射干涉原理来解释。按照这一理论,由条纹所构建形成的全新亮度分布,可以通过衍射波之间相互干涉所产生的结果来加以描述。


三,基于傅里叶变换原理来解释。依据傅里叶变换原理,能够把光栅副透射光场分解成为具有不同空间频率的离散分量,而莫尔条纹恰恰是由那些低于光栅频率的空间频率项所构成的。
 

三、遮光原理

遮光原理

当两个具有相似周期旋转角度的图案(如光栅、网格、线条等)重叠时,它们的透光或反射部分会相互调制,产生低频的、肉眼可见的条纹(莫尔条纹)。这个光栅结构可以是实际光栅,也可以是光栅的像。由于两块光栅的栅距相等(或近似相等),并且线纹宽度等于线纹间距,线纹间又有微小的夹角,那么两块光栅的线纹必然在空间相交。透过光线的区域形成亮带,不透光的区域形成暗带,其余区域介于亮带与暗带之间,这样就构成了清晰的莫尔条纹图像。

最常用的方法:

几何法

直观、简便只适用于局部

序数方程法

适用于全场,可导出莫尔条纹方程。

方法1:叠加两个正弦波栅格

% 设置参数
width = 500; % 图像宽度
height = 500; % 图像高度
f1 = 0.05; % 第一个栅格的频率
f2 = 0.04; % 第二个栅格的频率
theta = 10; % 第二个栅格的旋转角度(度)% 创建网格
[x, y] = meshgrid(1:width, 1:height);% 生成第一个正弦波栅格(水平方向)
pattern1 = sin(2*pi*f1*x);
imshow(pattern1, []);
title('正弦波栅格条纹1')% 生成第二个正弦波栅格(旋转一定角度)
x_rot = x*cosd(theta) + y*sind(theta);
pattern2 = sin(2*pi*f2*x_rot);
imshow(pattern2, []);
title('正弦波栅格条纹2')% 叠加两个图案生成摩尔条纹
moire = pattern1 + pattern2;imshow(pattern1, []);
imshow(pattern2, []);% 显示结果
figure;
imshow(moire, []);
title('正弦波栅格生成的摩尔条纹');
colormap(gray);

正弦波1

正弦波2

合成的摩尔波纹

 方法2:叠加两个圆形栅格

% 设置参数
width = 500;
height = 500;
f1 = 0.03; % 第一个圆形栅格的频率
f2 = 0.025; % 第二个圆形栅格的频率
cx = width/2; % 中心x坐标
cy = height/2; % 中心y坐标% 创建网格
[x, y] = meshgrid(1:width, 1:height);% 计算到中心的距离
r = sqrt((x-cx).^2 + (y-cy).^2);% 生成两个圆形栅格
pattern1 = sin(2*pi*f1*r);pattern2 = sin(2*pi*f2*r);
imshow(pattern2, []);
title('圆形栅格生成的条纹2')% 叠加生成摩尔条纹
moire = pattern1 + pattern2;% 显示结果
figure;
imshow(moire, []);
title('圆形栅格生成的摩尔条纹');
colormap(gray);

圆形波1

圆形波2 

圆形摩尔纹 

方法3:叠加两个不同角度的直线栅格

合成条纹:

 

% 参数设置
N = 512; % 图像大小
d1 = 20; % 光栅1周期(像素)
d2 = 22; % 光栅2周期(像素)
theta = 5; % 光栅2旋转角度(度)% 生成光栅1(水平方向)
[x, y] = meshgrid(1:N, 1:N);
grating1 = 0.5 + 0.5 * cos(2*pi*x/d1);% 生成光栅2(旋转theta角度)
theta_rad = deg2rad(theta);
x_rot = x*cos(theta_rad) + y*sin(theta_rad);
grating2 = 0.5 + 0.5 * cos(2*pi*x_rot/d2);% 叠加光栅生成摩尔条纹
moire_pattern = grating1 .* grating2;% 显示结果
figure;
subplot(1,3,1); imshow(grating1, []); title('光栅1');
subplot(1,3,2); imshow(grating2, []); title('光栅2');
subplot(1,3,3); imshow(moire_pattern, []); title('摩尔条纹');

总结:

四、衍射干涉原理

方法一:双光束干涉
  1. 装置:分束器将激光分为两束相干光,以微小角度 θ交汇。

  2. 干涉:两束光在重叠区域形成等间距干涉条纹(类似杨氏双缝),条纹间距 Δx 为:

    其中 λ 为光波长。

  3. 摩尔条纹:若干涉光栅与另一光栅叠加,会形成次级摩尔条纹。

% 参数设置
N = 512; % 图像大小
lambda = 10; % 波长(像素)
theta = 0.1; % 两光束夹角(弧度)% 生成干涉条纹
[x, y] = meshgrid(1:N, 1:N);  % 生成512*512 的图像
beam1 = exp(1i * 2*pi * sin(theta/2) * x / lambda);
beam2 = exp(1i * 2*pi * sin(-theta/2) * x / lambda);
interference = abs(beam1 + beam2).^2;% 显示结果
figure;
imshow(interference, []);
title('双光束干涉条纹');colorbar;

方法二:Talbot 自成像效应
  1. 单光栅衍射:一束平行光通过周期性光栅后,在特定距离会自成像。

  2. 叠加第二光栅:在 Talbot 距离附近放置第二光栅,与自成像光栅叠加产生摩尔条纹。

% 参数设置
N = 512; % 图像大小
d = 20; % 光栅周期(像素)
lambda = 632.8e-9; % 波长(m)
z_T = 2 * d^2 / lambda; % Talbot 距离(理论计算)% 生成初始光栅(正弦光栅)
[x, y] = meshgrid(1:N, 1:N);
grating = 0.5 + 0.5 * cos(2*pi*x/d);% 模拟光传播(菲涅尔衍射)
k = 2*pi/lambda;
z = z_T / 10; % 观察距离(小于Talbot距离)
propagated = fft2(grating);
[fx, fy] = meshgrid((-N/2:N/2-1)/N, (-N/2:N/2-1)/N);
H = exp(1i * k * z * sqrt(1 - (lambda*fx).^2 - (lambda*fy).^2));
propagated = ifft2(propagated .* fftshift(H));% 叠加第二光栅生成摩尔条纹
grating2 = 0.5 + 0.5 * cos(2*pi*x/(d+2)); % 周期略有不同
moire_talbot = abs(propagated) .* grating2;% 显示结果
figure;
subplot(1,3,1); imshow(grating, []); title('初始光栅');
subplot(1,3,2); imshow(abs(propagated), []); title('衍射后光场');
subplot(1,3,3); imshow(moire_talbot, []); title('Talbot 摩尔条纹');

五、傅里叶变换原理

 方法1:频域合成两光栅的叠加

步骤:

其核心思想是通过频域操作(如滤波、频谱叠加)控制空域周期性结构的叠加效果

  1. 在频域生成两个不同频率的正弦光栅频谱。

  2. 通过傅里叶逆变换(IFFT)得到空域光栅。

  3. 叠加两光栅生成摩尔条纹。

% 参数设置
N = 512;                % 图像大小
f1 = 1/20;              % 光栅1的频率(周期=20像素)
f2 = 1/22;              % 光栅2的频率(周期=22像素)% 生成频域坐标
[fx, fy] = meshgrid(-N/2:N/2-1);
fx = fx / N; fy = fy / N;% 生成两个光栅的频谱(狄拉克函数模拟理想光栅)
G1 = zeros(N);
G1(abs(fx - f1) < 0.001 & abs(fy) < 0.001) = 1;  % 光栅1(沿x方向)
G2 = zeros(N);
G2(abs(fx - f2) < 0.001 & abs(fy) < 0.001) = 1;  % 光栅2(沿x方向)% 傅里叶逆变换得到空域光栅
grating1 = real(ifft2(ifftshift(G1)));
grating2 = real(ifft2(ifftshift(G2)));% 叠加光栅生成摩尔条纹
moire_pattern = grating1 .* grating2;% 显示结果
figure;
subplot(1,3,1); imshow(grating1, []); title('光栅1 (频域生成)');
subplot(1,3,2); imshow(grating2, []); title('光栅2 (频域生成)');
subplot(1,3,3); imshow(moire_pattern, []); title('摩尔条纹');

 方法2:频域直接构造摩尔条纹频谱

  1. 摩尔条纹的频谱是两光栅频谱的卷积。

  2. 直接在频域构造卷积后的频谱,再逆变换得到空域条纹。

% 参数设置
N = 512;
f1 = 1/20;      % 光栅1频率
f2 = 1/22;      % 光栅2频率% 生成频域坐标
[fx, fy] = meshgrid(-N/2:N/2-1);
fx = fx / N;% 构造两光栅频谱的卷积(摩尔条纹频谱)
moire_spectrum = zeros(N);
moire_spectrum(abs(fx - (f1 - f2)) < 0.001) = 1;  % 低频摩尔条纹成分% 傅里叶逆变换得到空域摩尔条纹
moire_pattern = real(ifft2(ifftshift(moire_spectrum)));% 显示结果
figure;
subplot(1,2,1); imshow(log(abs(fftshift(moire_spectrum)) + 1), []); title('摩尔条纹频谱');
subplot(1,2,2); imshow(moire_pattern, []); title('空域摩尔条纹');

 方法3:通过频域滤波增强摩尔条纹

  1. 对两光栅叠加后的图像进行傅里叶变换。

  2. 在频域滤除高频成分,保留低频摩尔条纹。

  3. 逆变换后得到纯净的摩尔条纹。

% 生成两光栅叠加的空域图像(同方法1)
[x, y] = meshgrid(1:N);
grating1 = cos(2*pi*f1*x);
grating2 = cos(2*pi*f2*x);
moire_raw = grating1 .* grating2;% 傅里叶变换
moire_fft = fftshift(fft2(moire_raw));% 设计低通滤波器(保留低频摩尔条纹)
cutoff = 0.02;  % 截止频率
H = sqrt(fx.^2 + fy.^2) < cutoff;% 频域滤波
filtered_spectrum = moire_fft .* H;% 逆变换得到滤波后的摩尔条纹
moire_filtered = real(ifft2(ifftshift(filtered_spectrum)));% 显示结果
figure;
subplot(1,3,1); imshow(moire_raw, []); title('原始叠加光栅');
subplot(1,3,2); imshow(log(abs(moire_fft) + 1), []); title('原始频谱');
subplot(1,3,3); imshow(moire_filtered, []); title('滤波后摩尔条纹');

关键参数说明

参数作用
f1, f2控制两光栅的频率,差异越小,摩尔条纹周期越大。
cutoff低通滤波的截止频率,影响摩尔条纹的清晰度。
N图像分辨率,值越大模拟越精细,但计算量增加。

 六、应用场景

  • 精密测量:用于检测微小位移、形变或振动(如光栅尺)。

  • 防伪技术:纸币、证件上的莫尔图案用于防伪。

  • 图像处理:消除扫描图像时的摩尔纹(如去摩尔纹滤镜)。

  • 艺术设计:通过叠加图案创造动态视觉效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【海康USB相机被HALCON助手连接过后,MVS显示无法连接故障。】

在Halcon里使用助手调用海康USB相机时&#xff0c;如果这个界面点击了【是】 那么恭喜你&#xff0c;相机只能被HALCON调用使用&#xff0c;使用MVS或者海康开发库&#xff0c;将查找不到相机 解决方式&#xff1a; 右键桌面【此电脑】图标 ->选择【管理】 ->选择【设备…

数据治理是什么意思?数据治理平台有哪些?

目录 一、数据治理的概念 1. 数据治理的定义 2. 数据治理的目标 二、数据治理的实施流程 1. 规划阶段 2. 评估阶段 3. 执行阶段 4. 监控与评估阶段 三、常见的数据治理平台 1. FineDataLink 2. IBM InfoSphere Information Governance Catalog 四、总结 随着企业业…

高效工具-tldr

喜欢使用命令操作的小伙伴&#xff0c;肯定会遇到一个问题&#xff0c;查看命令如何使用时&#xff0c;会列出一堆&#xff0c;特别是英文&#xff0c;看的直发懵。前段时间我也是研究git命令&#xff0c;也遇到了类似的问题。好在有大数据&#xff0c;帮我普及相关的知识。 在…

安卓添加设备节点权限和selinux访问权限

# 1 修改设备节点权限及配置属性设置节点值 ## 1.1 修改设备节点权限 ### 1.1.1 不会手动卸载的节点 在system/core/rootdir/init.rc中添加节点权限 在on boot下面添加 chown system system /sys/kernel/usb/host chmod 0664 /sys/kernel/usb/host ### 1.1.2 支持热插拔的…

ssm学习笔记(尚硅谷) day1

创建新项目 maven的聚合 1. 标记父类项目 标签<packaging>pom</packaging>表示将该项目标记为父类项目&#xff0c;必须添加。 以下是标签<packing>的常见取值 groupId在pom.xml中&#xff0c;可以从pom.xml直接修改。 2. 通过<modules>添加子项目…

基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计

摘要 随着医疗信息化的不断推进以及“互联网医疗”模式的广泛普及&#xff0c;传统医院挂号流程中存在的排队时间长、资源分配不均等问题日益凸显&#xff0c;急需通过数字化手段加以解决。本研究设计并实现了一套基于Java、SpringBoot、Vue与UniAPP技术栈的医院预约挂号微信小…

Axure项目实战:运输统计页引入echarts实现高保真设计(JS代码ctrl+c ctrl+v懂得来)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 案例视频: 数据统计引入echarts示例演示 课程主题:运输统计页引入echarts实现高保真设计 主要内容…

python打卡day39

图像数据与显存 知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业&#xff1a;今日代码较少&#xff0c;理解内容即可 在 PyTorch 中&#xff0c;…

15.1 【基础项目】使用 HTML、CSS 和 TypeScript 构建的简单计数器应用

一个简单的计数器应用是学习如何集成 HTML、CSS 和 TypeScript 的绝佳项目。该应用允许用户对计数值进行增加、减少和重置&#xff0c;展示了 TypeScript 中基本的 DOM 操作和事件处理。 我们将构建的内容 我们将创建一个具有以下功能的计数器应用&#xff1a; 增加计数值减…

RT-Thread源码阅读(3)——内核对象管理

_object_container对象容器数组 在RT-Thread操作系统中&#xff0c;_object_container数组的作用是按类型分类管理内核对象&#xff0c;提供高效的类型检查、资源管理和统计功能 struct rt_list_node {struct rt_list_node *next; /**< point to…

《智能医学》征稿通知:7天可见刊,专科及以上可发表

香港科学出版社(Hong Kong Scientific Publishers Journals)是一家全球独立高质量的学术出版机构&#xff0c;遵循国际开放获取的出版(OA)原则。现已与科检易学术携手共同征集高质量文章。目前可出版来自高等学校、科研院所和企业的先进科技成果。包括理、工、农、医、经、管、…

如何利用categraf的exec插件实现对Linux主机系统用户及密码有效期进行监控及告警?

需求描述 Categraf作为夜莺监控平台的数据采集工具&#xff0c;为了保障Linux主机的安全&#xff0c;需要实现对系统用户密码有效期的监控&#xff0c;并在密码即将到期时及时告警&#xff0c;以提醒运维人员更改密码。本章将详细介绍如何利用Categraf的exec插件来实现这一功能…

RV1126-OPENCV 交叉编译

一.下载opencv-3.4.16.zip到自己想装的目录下 二.解压并且打开 opencv 目录 先用 unzip opencv-3.4.16.zip 来解压 opencv 的压缩包&#xff0c;并且进入 opencv 目录(cd opencv-3.4.16) 三. 修改 opencv 的 cmake 脚本的内容 先 cd platforms/linux 然后修改 arm-gnueabi.to…

如何加载私钥为 SecKeyRef

本文介绍如何在 iOS/macOS 下将私钥加载为 SecKeyRef&#xff0c;涵盖 PEM 格式的 ECC 密钥读取、X9.63 数据构建、以及与 Keychain 的集成。 1. 使用 SecKeyCreateWithData 加载私钥 Apple 提供的 SecKeyCreateWithData 方法可以直接将密钥数据加载为 SecKeyRef 对象。 SecK…

Missashe考研日记—Day44-Day50

Missashe考研日记—Day44-Day50 写在面前 本系列博客用于记录博主一周的学习进度&#xff0c;具体知识总结在目前已有的笔记中&#xff1a;1.高数强化学习笔记2.计网复习笔记3.新增&#xff1a;线代题型总结 专业课408 这周先是把计网第三章数据链路层剩下的局域网以及之后…

Windows下安装并使用kubectl查看K8S日志

【1】安装kubectl 官网文档&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-windows/ 下载后得到 kubectl.exe&#xff0c;放到一个目录下&#xff0c;然后配置环境变量。 此时CMD 进入DOS命令窗口 kubectl version【2】配置config文件 其实就是…

攻防世界János-the-Ripper

打开压缩包是一个文件&#xff0c;用010Editor打开可以发现里面有隐藏文件flag.txt 此时想到分离文件&#xff0c;利用binwalk工具 利用binwalk生成出的是一个压缩包&#xff0c;解压缩但是发现竟然解压需要密码 这里就可以开始暴力破解密码了&#xff0c;这里我用的是ARCHPR工…

XPlifeapp:高效打印,便捷生活

在数字化时代&#xff0c;虽然电子设备的使用越来越普遍&#xff0c;但打印的需求依然存在。无论是学生需要打印课表、资料&#xff0c;还是职场人士需要打印名片、报告&#xff0c;一个高效便捷的打印软件都能大大提高工作效率。XPlifeapp就是这样一款超级好用的手机打印软件&…

【计算机网络】第2章:应用层—Web and HTTP

目录 一、Web 与 HTTP 二、总结 &#xff08;一&#xff09;Web 的定义与功能 &#xff08;二&#xff09;HTTP 协议的定义与功能 &#xff08;三&#xff09;HTTP 协议的核心机制 1. HTTP 请求与响应流程 2. HTTP 的连接类型 3. HTTP 的状态码 &#xff08;四&#xf…