激光条纹中心提取——方向模板法

该博客介绍了使用方向模板匹配方法对激光条纹图像进行处理的步骤,包括预处理、二值化、膨胀腐蚀等操作,然后利用特定模板匹配找到条纹中心。在处理过程中,算法能有效克服白噪声干扰并修补断线,适用于纹理复杂的物面。最后,代码展示了匹配过程,并绘制了匹配结果。
摘要由CSDN通过智能技术生成

老实的方向模板法

方向模板匹配的精度往往受限模板的方向,并且由于大量的匹配运算消耗当量的时间,纹理复杂的物面会使条纹向更多方向发生偏移,优点就是能够克服白噪声干扰,具有在一定程度上修补断线的能力,通常方向模板和灰度重心法相结合较为常见。
在这里插入图片描述

上代码

clear;
clc
I = imread('6.png');
img = imread('6.png');
if ndims(I) == 3
    I = rgb2gray(I);
end
thresh =20;
[r,c] = size(I);
for i = 1:r
    for j = 1:c
        if I(i,j) < thresh
            I(i,j) = 0;
        end
    end
end
%创建预定义滤波算子
gaussFilter =  fspecial('gaussian',[7 7],5);
%对图像进行滤波,‘replicate’表示图像大小通过复制外边界的值来扩展
I = imfilter(I,gaussFilter,'replicate');
%灰度拉伸,增强图像对比
I = im2uint8( mat2gray( log(1 + double(I)) ) ); 
imshow(I);
I = double(I)/255;
%二值化图像
thresh = graythresh(I);
I1=im2bw(I,thresh);
imshow(I1);
%膨胀处理
I1=bwmorph(I1,'dilate',10);
imshow(I1);
%腐蚀
se = strel('disk',6);
I1=imclose(I1,se);
I1 = bwmorph(I1,'thin',Inf);
% bwl=bwmorph(I,'skel',Inf);
% figure;
imshow(I1,'Border','tight');
% [r,c]=size(I1);
% T1=[0 0 0 0 1 0 0 0 0;
%     0 0 0 0 1 0 0 0 0;
%     0 0 0 0 1 0 0 0 0;
%     0 0 0 0 1 0 0 0 0;
%     0 0 0 0 1 0 0 0 0;
%     0 0 0 0 1 0 0 0 0;
%     0 0 0 0 1 0 0 0 0;
%     0 0 0 0 1 0 0 0 0;
%     0 0 0 0 1 0 0 0 0
%     ];
% 
% T2=[0 0 0 0 0 0 0 0 0;
%     0 0 0 0 0 0 0 0 0;
%     0 0 0 0 0 0 0 0 0;
%     0 0 0 0 0 0 0 0 0;
%     1 1 1 1 1 1 1 1 1;
%     0 0 0 0 0 0 0 0 0;
%     0 0 0 0 0 0 0 0 0;
%     0 0 0 0 0 0 0 0 0;
%     0 0 0 0 0 0 0 0 0
%     ];
% 
% T3=[1 0 0 0 0 0
激光条纹中心提取的极值是一种常用于图像处理中的技术,特别是在光学测量和机器视觉领域。这种技术通常用于从干涉条纹图像中提取相位信息,进而进行三维形貌的测量。极值的基本思想是认为激光条纹的强度分布呈现正弦波形,条纹中心对应于正弦波的峰值或谷值。 以下是一个简化的极值提取激光条纹中心的Python代码示例: ```python import numpy as np import matplotlib.pyplot as plt def find_peaks(signal, n=5): """寻找局部极大值""" peaks = [] for i in range(1, len(signal) - 1): if (signal[i] > signal[i - 1]) and (signal[i] > signal[i + 1]): peaks.append(i) return peaks # 假设我们有一个一维的激光条纹强度信号 laser_signal = np.sin(np.linspace(0, 2 * np.pi, 100)) * 0.5 + 0.5 # 找到激光条纹中心位置的峰值 peaks = find_peaks(laser_signal) # 绘制原始信号和峰值 plt.plot(laser_signal) plt.plot(peaks, laser_signal[peaks], "ro") plt.title("Laser Stripe Center Extraction") plt.xlabel("Pixel") plt.ylabel("Intensity") plt.show() ``` 上述代码首先创建了一个模拟的激光条纹强度信号,然后通过`find_peaks`函数找到信号中的局部极大值,即为条纹中心的位置。最后,使用matplotlib绘制了原始信号和标记了峰值的位置。 在实际应用中,激光条纹可能不是一维的,而是二维的条纹图像。这种情况下,需要对二维图像的每一行或者每一列分别进行极值搜索,以获取条纹中心的二维坐标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值