四步移相法+剪切散斑干涉+正余弦滤波+近表面缺陷识别

一、四步移相原始数据

镜面加载前,对其进行四步移相,得到四幅图,分别记为:

before_1,before_2,before_3,before_4

镜面加载后,对其进行四步移相,得到四幅图,分别记为:

after_1, after_2, after_3, after_4

一共有八张,使用opencv变为灰度图。

二、进行四步移相

四步移相公式:

在整个过程中,图像数据的值域非常关键。判断I1-I3和I4-I2的正负,可以把原本【-pi/2,pi/2】的数据细化到【-pi,pi】

理由如下:

 注意:

1、opencv读到图的每个像素值是ubyte类型,所以公式中每一项都一定要强制转化为int类型,否则减法算出来有负数,它就溢出了!!!导致结果错误。

 2、四步移相后,值域从【0,255】映射到了【-pi,pi】,这一点一定要记住,Imshow的时候要用公式把值域从【-pi,pi】映射到【0,255】。公式如下:

 最后把加载前后的两张相位图进行相减,展示,效果如下图:


 三、正余弦滤波

普通的高斯滤波、均值滤波等都不适合,使用正余弦滤波,步骤原理如下:

但是在实现过程中,有很多坑。

注意:

在滤波过程中,一定要注意值域变化!!!

最后放一个ksize=3,迭代40次的图。迭代次数有待商榷,这里只是给一个例子。

 四、缺陷识别

被测件的内部缺陷隐藏在条纹图中,对其进行缺陷识别。

剪切散斑干涉缺陷检测

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
### 回答1: MATLAB四步移相法是一种用于信号处理和频谱分析的常用方。它将输入信号分成四个相位不同的信号,然后对每个相位的信号进行处理,最后将它们合并以得到最终的结果。以下是MATLAB四步移相法的程序: 1. 输入原始信号:首先,我们需要输入要处理的信号。可以使用MATLAB中的`input`函数或读取一个文件来获取信号数据。 2. 分解信号:将原始信号分成四个相位不同的信号。可以使用MATLAB中的`hilbert`函数来实现分解。该函数会返回复数形式的信号,其中包含原始信号和90度相位移的信号。 ```matlab signal = input; % 输入信号 complex_signal = hilbert(signal); % 分解信号 phase_shifted_signals = zeros(length(signal), 4); phase_shifted_signals(:, 1) = real(complex_signal); % 零相位信号 phase_shifted_signals(:, 2) = imag(complex_signal); % 90度相位信号 phase_shifted_signals(:, 3) = imag(-complex_signal); % 180度相位信号 phase_shifted_signals(:, 4) = real(-complex_signal); % 270度相位信号 ``` 3. 信号处理:对每个相位的信号进行所需的处理和分析。这可以是应用滤波器、进行傅里叶变换或其他信号处理操作。 ```matlab % 对每个相位的信号进行处理 for i = 1:4 processed_signal = process_signal(phase_shifted_signals(:, i)); % 处理函数根据需要自定义 % 在这里可以进行滤波、频谱分析等操作 end ``` 4. 合并信号:将处理后的信号合并成一个信号。可以通过加权平均或简单地将它们相加来实现。 ```matlab merged_signal = sum(phase_shifted_signals, 2) / 4; % 加权平均 ``` 以上就是MATLAB四步移相法的基本程序。根据具体需求,可以根据相位处理的不同分别对每个阶段的代码进行修改和扩展。 ### 回答2: 四步移相法(Four-step phase-shifting method)是一种在数字图像处理中常用的技术,用于提取图像中的相位信息。下面是一个使用MATLAB编写的简单四步移相法程序示例: ```matlab % 步骤一:加载图像 image = imread('image.jpg'); % 读取图像 image = rgb2gray(image); % 转为灰度图像 % 步骤二:计算相位差 I1 = double(image); % 将图像转换为双精度型 I2 = imrotate(image, 90); % 对图像进行90度旋转 I2 = double(I2); % 将旋转后的图像转换为双精度型 phase_diff = atan2(I2 - I1, I1); % 计算相位差 % 步骤三:相位解包 unwrapped_phase = unwrap(phase_diff); % 解包相位 % 步骤四:显示相位图像 figure; imshow(unwrapped_phase, []); % 显示解包相位图像 colormap(jet); % 使用jet颜色映射 title('相位图像'); colorbar; % 显示颜色条 ``` 在这个程序中,我们首先加载了一张图像,将其转换为灰度图像。然后,通过对图像进行90度旋转并计算相位差,获取了图像的相位信息。接下来,使用相位解包算对相位差进行解包,得到完整的相位信息。最后,显示解包后的相位图像,并添加相应的标题和颜色条。 这个程序的目的是演示四步移相法的基本原理,实际应用中可能还需要根据具体情况进行参数调节和后续处理。希望这个简单的示例能帮助你理解和使用四步移相法。 ### 回答3: Matlab四步移相法是一种用于相位解调的方。该算的主要目标是通过对输入信号进行滤波和相位解调,获取信号的相位信息。 以下是一个300字的Matlab四步移相法程序示例: 步骤1:准备数据 首先,我们需要准备输入信号。可以通过直接输入信号数据,或者从文件中读取信号数据。假设我们通过文件读取信号数据,并将其存储在一个名为"signal.dat"的文件中。 步骤2:滤波 为了减少可能存在的噪声对相位解调结果的影响,我们需要对信号进行滤波。可以选择合适的滤波器类型和参数,例如低通滤波器或带通滤波器。使用Matlab的滤波函数,将输入信号和滤波器作为输入,并将滤波后的信号作为输出保存。 步骤3:相位解调 通过对滤波后的信号进行相位解调,我们可以获取信号的相位信息。在四步移相法中,我们使用两个相位相差90°的弦信号作为参考信号,并与输入信号相乘。可以使用Matlab的乘运算符实现这一步骤。 步骤4:解调结果 最后,我们可以通过取相位差或反切运算,从相位解调信号中获取信号的相位信息。可以使用Matlab的相关函数(例如atan2函数)计算解调结果,并将结果保存。 整个程序的实现需要使用Matlab的信号处理函数和运算符,结合合适数学计算和数据操作的代码逻辑来完成。完成程序后,可以对输入信号进行相位解调,并获得信号的相位信息。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇智波洛必达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值