金属钢板缺陷检测并识别的matlab代码
时间: 2024-06-08 14:11:37 浏览: 173
MATLAB实现金属表面缺陷识别和检测(基于相位变换的无监督)【图像处理实战】
5星 · 资源好评率100%
这里提供一份基于 Matlab 的金属钢板缺陷检测与识别的代码,仅供参考:
```matlab
clc;
clear all;
close all;
I=imread('defect.jpg'); % 读取原始图像
subplot(2,3,1);imshow(I);title('原始图像'); % 显示原始图像
% 图像预处理
I_gray=rgb2gray(I); % 转换为灰度图像
subplot(2,3,2);imshow(I_gray);title('灰度图像'); % 显示灰度图像
I_bw=imbinarize(I_gray,'adaptive','ForegroundPolarity','dark','Sensitivity',0.4); % 自适应二值化
subplot(2,3,3);imshow(I_bw);title('二值化图像'); % 显示二值化图像
% 缺陷检测
I_edge=edge(I_bw,'canny',0.4); % 边缘检测
subplot(2,3,4);imshow(I_edge);title('边缘检测'); % 显示边缘检测结果
SE=strel('disk',2); % 创建大小为 2 的圆形结构元素
I_dilate=imdilate(I_edge,SE); % 膨胀操作
subplot(2,3,5);imshow(I_dilate);title('膨胀操作'); % 显示膨胀操作结果
I_fill=imfill(I_dilate,'holes'); % 填充孔洞
subplot(2,3,6);imshow(I_fill);title('填充孔洞'); % 显示填充孔洞结果
% 缺陷识别
[L,n] = bwlabel(I_fill); % 连通域标记
stats=regionprops(L,'Area','Centroid','BoundingBox'); % 计算连通域属性
figure;
imshow(I); % 显示原始图像
hold on;
for i=1:n % 遍历所有连通域
if stats(i).Area>100 % 过滤面积较小的连通域
rectangle('Position',stats(i).BoundingBox,'EdgeColor','r'); % 绘制矩形框
text(stats(i).Centroid(1),stats(i).Centroid(2),num2str(i),'Color','g','FontSize',14); % 标注缺陷编号
end
end
hold off;
```
这份代码将原始图像进行了灰度转换、自适应二值化、边缘检测、膨胀、孔洞填充等预处理操作,然后使用连通域标记和属性计算的方法进行缺陷检测和识别,并在原始图像上绘制矩形框和标注缺陷编号。需要注意的是,这份代码仅供参考,实际使用时需要根据具体情况进行调整和优化。
阅读全文