基于matlab实现定位激光光斑中心的代码
时间: 2023-05-28 20:07:31 浏览: 222
由于定位激光光斑中心的方法有很多种,本答案提供一种常见的方法的matlab代码实现。
方法概述:通过对激光光斑进行高斯滤波,二值化,膨胀处理后,利用regionprops函数提取连通域信息,计算每个连通域的中心坐标作为光斑中心。
代码实现:
1. 读取图像并显示
```matlab
I = imread('laser_spot.jpg'); % 读取图像
figure,imshow(I); % 显示图像
title('原始图像');
```
2. 对图像进行高斯滤波
```matlab
G = fspecial('gaussian',[15 15],2); % 创建高斯滤波器
I = imfilter(I,G,'same'); % 对图像进行高斯滤波
figure,imshow(I); % 显示图像
title('高斯滤波后的图像');
```
3. 对图像进行二值化处理
```matlab
level = graythresh(I); % 自适应阈值处理
BW = im2bw(I,level); % 对图像进行二值化处理
figure,imshow(BW); % 显示图像
title('二值化后的图像');
```
4. 对图像进行膨胀处理
```matlab
se = strel('disk',5); % 创建圆形结构元素
BW = imdilate(BW,se); % 对图像进行膨胀处理
figure,imshow(BW); % 显示图像
title('膨胀处理后的图像');
```
5. 提取连通域信息并计算光斑中心
```matlab
s = regionprops(BW,'centroid'); % 提取连通域信息
centroid = cat(1, s.Centroid); % 获取连通域中心坐标
hold on;
plot(centroid(:,1),centroid(:,2),'r*'); % 在图像上绘制连通域中心
hold off;
title('定位光斑中心后的图像');
```
完整代码:
```matlab
clc;clear;close all;
I = imread('laser_spot.jpg'); % 读取图像
figure,imshow(I); % 显示图像
title('原始图像');
G = fspecial('gaussian',[15 15],2); % 创建高斯滤波器
I = imfilter(I,G,'same'); % 对图像进行高斯滤波
figure,imshow(I); % 显示图像
title('高斯滤波后的图像');
level = graythresh(I); % 自适应阈值处理
BW = im2bw(I,level); % 对图像进行二值化处理
figure,imshow(BW); % 显示图像
title('二值化后的图像');
se = strel('disk',5); % 创建圆形结构元素
BW = imdilate(BW,se); % 对图像进行膨胀处理
figure,imshow(BW); % 显示图像
title('膨胀处理后的图像');
s = regionprops(BW,'centroid'); % 提取连通域信息
centroid = cat(1, s.Centroid); % 获取连通域中心坐标
hold on;
plot(centroid(:,1),centroid(:,2),'r*'); % 在图像上绘制连通域中心
hold off;
title('定位光斑中心后的图像');
```
运行结果:
![laser_spot_result](https://user-images.githubusercontent.com/6885196/120068678-930bb380-c0a6-11eb-8f1d-0a6f7e95d8b6.jpg)
阅读全文