目录标题
选题意义背景
玻璃纤维作为一种新型复合材料,具有重量轻、强度高、耐腐蚀、绝缘性能好等诸多优良特性,在航空航天、汽车制造、建筑工程、电子电器等领域得到广泛应用 ,随着全球制造业转型升级和环保意识的提高,玻璃纤维及复合材料行业保持稳定增长态势,市场规模持续扩大,在玻璃纤维缠绕过程中,需要将多根玻璃纤维按照预定的角度和张力缠绕在芯模上,形成均匀、致密的复合材料层。缠绕工艺的质量直接影响最终产品的强度、耐压性能和使用寿命,因此在缠绕过程中对玻璃纤维状态的实时监控至关重要。

在玻璃纤维缠绕生产过程中,由于机械摩擦、张力变化、材料缺陷等原因,玻璃纤维可能发生断裂。一旦发生断纱,若不能及时检测并处理,会导致以下问题:
- 缠绕产品质量下降,出现局部强度不足
- 断纱头可能混入其他纤维中,造成更多纤维断裂
- 影响生产效率,增加人工检查和修复成本
- 严重情况下可能导致设备损坏或安全事故
随着计算机视觉算法的不断优化和硬件设备性能的提升,机器视觉在纺织、电子、汽车等行业的应用深度和广度不断拓展。特别是在需要高精度、高速检测的场景下,机器视觉技术展现出明显的优势。
数据集
数据获取
本项目的数据集主要通过搭建的实验平台采集获取。为了真实模拟玻璃纤维缠绕机的工作环境,我们构建了一个包含浸胶槽、工业相机、28根玻璃纤维、计算机和控制设备的实验系统。数据采集过程如下:
- 设备准备:在实验平台上安装两台工业相机 ,配备25mm焦距镜头和HDL3系列条形光源,确保图像采集质量。
- 正常状态数据采集:启动缠绕机,使28根玻璃纤维以1m/s的速度正常运行,通过两台相机分别采集玻璃纤维正常状态下的图像数据。每台相机采集10000张图像,总计20000张正常状态图像。
- 断纱状态数据采集:模拟不同断纱情况,分别制造单根断纱(如第1根、第5根、第12根等)和多根断纱(如第1根和第24根同时断开)的场景,每种场景下每台相机采集5000张图像。
数据格式
采集的图像数据具有以下特点:
- 图像格式:采用工业相机标准的BMP格式,确保图像质量和处理便捷性
- 图像分辨率:原始图像分辨率为2048×1088像素
- ROI区域:经过分析,确定有效的感兴趣区域(ROI)为1600×100像素的矩形区域,该区域能够完整包含所有28根玻璃纤维
数据分割
为了验证模型的泛化能力,我们将采集的数据按照以下比例进行分割:
- 训练集:70%的图像数据,用于SVM模型的训练
- 验证集:15%的图像数据,用于训练过程中的模型参数调整和验证
- 测试集:15%的图像数据,用于最终评估模型性能
数据分割时采用分层抽样的方法,确保每个类别的数据在训练集、验证集和测试集中的比例保持一致,避免数据分布不平衡导致的模型偏差。
数据预处理
在使用图像数据进行模型训练和测试之前,需要进行一系列预处理操作,主要包括:

-
ROI提取:从原始图像中裁剪出1600×100像素的感兴趣区域,只保留包含玻璃纤维的部分,减少数据量和计算复杂度。
-
图像滤波:采用中值滤波(核大小为7)对图像进行去噪处理,有效去除图像中的椒盐噪声,同时保持玻璃纤维边缘的清晰度。
-
图像二值化:使用全局阈值法(阈值设为90)将灰度图像转换为二值图像,突出玻璃纤维轮廓,抑制背景干扰。
-
形态学操作:对二值图像先进行开操作,再进行闭操作,去除小的噪声点和孔洞,使玻璃纤维轮廓更加连续和清晰。
-
边缘检测:使用Canny算子进行边缘检测,提取玻璃纤维的边缘轮廓。
-
轮廓提取:使用OpenCV的findContours函数 提取玻璃纤维的外部轮廓,并根据轮廓像素点个数(阈值170)过滤掉噪声轮廓。
-
特征提取:计算每个玻璃纤维轮廓的质心坐标,作为SVM多分类模型的输入特征。
通过这些预处理操作,不仅提高了图像质量,还提取了有效的特征信息,为后续的断纱检测和位置识别奠定了基础。
功能模块
图像采集模块
图像采集模块是整个断纱检测系统的基础,负责实时采集玻璃纤维的图像数据。该模块主要由工业相机、镜头、光源和图像传输接口组成:
- 采用双相机布局,在浸胶槽上方安装两台工业相机,确保能够完整覆盖所有28根玻璃纤维
- 通过条形光源提供均匀照明,减少阴影和反光对图像质量的影响
- 使用高速数据传输接口,确保图像能够实时传输到上位机进行处理
图像处理
图像处理模块是断纱检测系统的核心,负责对采集到的图像进行一系列处理,提取玻璃纤维的轮廓特征,为断纱检测和位置识别提供基础:
- 采用经典的图像处理流程:ROI提取→滤波→二值化→形态学操作→边缘检测→轮廓提取
- 通过比较不同图像处理方法和参数的效果,选择最优的处理参数组合
- 基于轮廓像素点个数的阈值判断法,实现对断纱的初步检测

断纱识别与位置定位
断纱识别与位置定位模块负责根据处理后的图像信息,判断玻璃纤维是否断开,并精确定位断开的玻璃纤维位置。该模块采用SVM多分类算法实现:
- 以玻璃纤维轮廓质心坐标作为SVM模型的输入特征
- 采用SVM"一对一"多分类策略,将28类问题转化为多个二分类问题
- 通过投票机制确定最终的分类结果,实现对断纱位置的精确定位
-
特征提取:
- 计算每个玻璃纤维轮廓的质心坐标(xa, ya)作为特征向量
- 质心坐标能够准确反映玻璃纤维的位置信息
-
SVM模型训练:
- 构建28个类别的训练数据集,每个类别包含多个质心坐标样本
- 采用"一对一"多分类策略,构建28×27/2=378个二分类器
- 使用线性核函数(LINEAR)训练SVM模型,设置惩罚参数C=1
- 通过实验确定最优迭代次数为600
-
断纱检测与位置识别:
- 在测试阶段,对实时采集的图像进行处理,提取玻璃纤维轮廓并计算质心
- 将质心坐标输入训练好的SVM模型,通过投票机制确定每个质心对应的玻璃纤维位置
- 比较识别出的玻璃纤维根数与预设根数(28根),判断是否发生断纱
- 通过分析缺失的类别标签,确定具体的断纱位置
算法理论
图像处理
图像处理是断纱检测系统的基础,涉及多个经典的图像处理算法。下面详细介绍本系统中使用的主要图像处理算法原理。
** 图像滤波算法**
图像滤波是预处理的关键步骤,用于去除噪声并增强有用信息。本系统比较了四种常用的滤波算法:
-
均值滤波:
- 原理:用像素点周围邻域像素的平均值代替该像素值
- 优点:算法简单,计算速度快
- 缺点:容易模糊图像边缘,对椒盐噪声效果不佳
-
高斯滤波:
- 原理:使用高斯函数生成的权重矩阵对图像进行卷积操作
- 优点:对高斯噪声有良好的抑制效果
- 缺点:计算复杂度较高,仍会模糊边缘
-
中值滤波:
- 原理:用像素点周围邻域像素的中值代替该像素值
- 优点:能够有效去除椒盐噪声,同时保持边缘清晰
- 缺点:对某些类型的噪声效果有限
图像二值化是将灰度图像转换为二值图像的过程,用于突出目标物体并抑制背景。本系统采用全局阈值法进行二值化,选择一个全局阈值T,将灰度值大于T的像素设为255(白色),小于等于T的像素设为0(黑色)
- 阈值选择:通过大量实验,确定最佳阈值为90
- 效果:在该阈值下,玻璃纤维轮廓清晰可见,背景得到有效抑制
形态学操作是基于形状的图像处理技术,用于修改目标物体的形状和结构。本系统使用开操作和闭操作组合:
-
开操作:
- 定义:先腐蚀后膨胀的操作
- 作用:去除小的噪声点,断开物体之间的细连接
- 参数:使用3×3的矩形结构元素

-
闭操作:
- 定义:先膨胀后腐蚀的操作
- 作用:填充物体内部的小空洞,连接物体之间的细小间隙
- 参数:使用3×3的矩形结构元素
通过先开后闭的形态学操作,玻璃纤维的轮廓更加连续和完整,有利于后续的边缘检测和轮廓提取。
边缘检测是提取目标物体边界的重要步骤。本系统比较了四种常用的边缘检测算子:
-
Sobel算子:
- 原理:使用两个3×3的卷积核分别计算图像在x和y方向的梯度
- 优点:对噪声具有一定的抑制能力
- 缺点:边缘定位精度一般
-
Scharr算子:
- 原理:Sobel算子的改进版本,使用更大的权重系数
- 优点:边缘检测效果更精确
- 缺点:计算复杂度略有增加
-
Laplacian算子:
- 原理:使用二阶导数计算图像的边缘
- 优点:对边缘的定位更准确
- 缺点:对噪声敏感
-
Canny算子:
- 原理:采用多阶段算法,包括高斯滤波、梯度计算、非极大值抑制和双阈值检测
- 优点:边缘检测效果最佳,能够检测到连续、完整的边缘
- 缺点:参数设置较为复杂
通过实验比较,本系统选择Canny算子进行边缘检测,设置低阈值150,高阈值255,核大小5,能够提取出最清晰、完整的玻璃纤维边缘。
SVM多分类
支持向量机(SVM)是一种强大的机器学习算法,在分类问题中表现优异。本系统采用SVM"一对一"多分类算法实现玻璃纤维断开位置的识别。SVM二分类的基本思想是通过寻找一个最优超平面,将不同类别的数据分隔开来。

-
线性可分情况:
- 对于线性可分的数据,存在一个超平面能够将正负样本完全分开
- 最优超平面是指能够使两类样本到超平面的最小距离(间隔)最大化的超平面
-
线性不可分情况:
- 当数据线性不可分时,引入松弛变量ξ和惩罚参数C
- 优化目标:最小化(1/2)||w||² + CΣξi,其中C控制对误分类样本的惩罚程度
断纱检测
断纱检测是本系统的核心功能,基于轮廓分析和SVM分类实现。
-
基于轮廓像素点个数的断纱检测:
- 原理:当玻璃纤维断开时,断口部分的轮廓像素点个数会显著减少
- 阈值设置:通过大量实验,确定轮廓像素点个数阈值为170
- 检测逻辑:当轮廓像素点个数小于170时,认为该轮廓为噪声,将其过滤掉
-
基于SVM分类的断纱位置识别:
- 正常情况下,系统应该识别出28根玻璃纤维
- 当某根玻璃纤维断开时,其对应的轮廓被过滤,导致识别出的玻璃纤维根数减少
- 通过比较识别出的玻璃纤维根数与预设根数(28根),判断是否发生断纱
- 通过分析缺失的类别标签,确定具体的断纱位置
-
断纱检测流程:
- 实时采集玻璃纤维图像
- 进行图像处理,提取轮廓
- 计算轮廓质心坐标,输入SVM模型进行分类
- 统计识别出的玻璃纤维根数和位置
- 判断是否发生断纱,并确定断纱位置
- 发送断纱信息到报警系统
核心代码
图像处理
璃纤维图像的完整处理流程,包括ROI提取、中值滤波、二值化、形态学操作、边缘检测、轮廓提取和质心计算。
-
ROI提取:通过定义矩形区域,从原始图像中裁剪出包含所有玻璃纤维的感兴趣区域,减少数据处理量。
-
中值滤波:使用核大小为7的中值滤波器对图像进行去噪,有效去除椒盐噪声的同时保持边缘清晰。
-
全局阈值二值化:将灰度图像转换为二值图像,阈值设为90,使玻璃纤维轮廓与背景形成鲜明对比。
-
形态学操作:通过先开后闭的形态学操作,去除小噪声点并填充小空洞,使玻璃纤维轮廓更加连续完整。
-
边缘处理:将二值图像的第一行和最后一行设为黑色,避免边缘效应带来的干扰。
-
Canny边缘检测:提取玻璃纤维的边缘轮廓,设置合适的阈值参数以获得清晰的边缘。
-
轮廓提取与过滤:使用RETR_EXTERNAL模式提取外部轮廓,并根据轮廓像素点个数(阈值170)过滤掉噪声轮廓。
-
质心计算:对每个有效轮廓,计算其质心坐标,作为SVM分类的特征向量。
-
结果可视化:在原始图像上绘制处理结果,包括轮廓和质心标记,便于直观观察。本部分代码实现了对玻璃纤维图像的预处理和特征提取,是断纱检测的基础。
// 图像处理核心函数
void processImage(Mat &srcImage, vector<Point2f> ¢roids) {
// 1. 提取ROI区域
Rect roi(200, 494, 1600, 100); // ROI矩形区域:左上角坐标(200,494),宽1600,高100
Mat roiImage = srcImage(roi).clone();
// 2. 中值滤波去噪
Mat medianImage;
medianBlur(roiImage, medianImage, 7); // 核大小为7的中值滤波
// 3. 图像二值化
Mat binaryImage;
threshold(medianImage, binaryImage, 90, 255, THRESH_BINARY); // 全局阈值二值化,阈值为90
// 4. 形态学操作:先开后闭
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); // 3×3矩形结构元素
Mat openImage, closeImage;
morphologyEx(binaryImage, openImage, MORPH_OPEN, kernel); // 开操作
morphologyEx(openImage, closeImage, MORPH_CLOSE, kernel); // 闭操作
// 5. 将第一行和最后一行设为黑色,避免边缘干扰
for (int i = 0; i < closeImage.cols; i++) {
closeImage.at<uchar>(0, i) = 0;
closeImage.at<uchar>(closeImage.rows - 1, i) = 0;
}
// 6. Canny边缘检测
Mat edgeImage;
Canny(closeImage, edgeImage, 150, 255, 5); // 低阈值150,高阈值255,核大小5
// 7. 轮廓提取
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(edgeImage, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 8. 轮廓过滤与质心计算
centroids.clear();
for (size_t i = 0; i < contours.size(); i++) {
// 根据轮廓像素点个数过滤噪声轮廓
if (contours[i].size() > 170) { // 阈值设为170
// 计算轮廓质心
Moments mu = moments(contours[i]);
Point2f centroid;
centroid.x = mu.m10 / mu.m00;
centroid.y = mu.m01 / mu.m00;
centroids.push_back(centroid);
// 在原图像上绘制轮廓和质心(可选)
drawContours(roiImage, contours, i, Scalar(0, 255, 0), 2);
circle(roiImage, centroid, 5, Scalar(0, 0, 255), -1);
}
}
// 9. 将处理后的ROI图像放回原图像
roiImage.copyTo(srcImage(roi));
}
这段代码是整个断纱检测系统的核心,通过一系列图像处理操作,将原始图像转换为可用于分类的特征向量,为后续的断纱检测和位置识别奠定基础。
SVM多分类
完整的SVM多分类器,用于玻璃纤维断开位置的识别。主要包括以下几个核心功能:
-
SVM分类器初始化:根据玻璃纤维的总根数(默认28根),计算需要构建的二分类器数量(28×27/2=378个),并初始化相应的数据结构。
-
模型训练:
-
采用"一对一"策略,为每对不同类别构建一个二分类器
-
对于每对类别(i,j),收集这两类的训练样本(质心坐标)
-
训练SVM模型并保存
-
-
类别预测:
- 对每个输入的质心坐标,使用所有二分类器进行预测
- 采用投票机制,统计每个类别的得票数
- 得票最多的类别即为最终预测结果
-
断纱检测:
- 比较预测出的玻璃纤维类别与预设的总根数(28根)
- 找出未被预测到的类别,即为断纱位置
- 返回所有断纱位置的列表本部分代码实现了基于SVM的玻璃纤维断开位置识别功能,是断纱定位的关键。
// SVM多分类器类
class GlassFiberSVMClassifier {
private:
vector<Ptr<SVM>> svmClassifiers; // 存储所有二分类器
int totalClasses; // 总类别数
public:
GlassFiberSVMClassifier(int classes = 28) : totalClasses(classes) {
// 初始化所有二分类器
int classifierCount = totalClasses * (totalClasses - 1) / 2;
svmClassifiers.resize(classifierCount);
}
// 训练SVM模型
void train(const vector<vector<Point2f>>& trainingData, const vector<int>& labels) {
int classifierIndex = 0;
// 为每对类别训练一个二分类器
for (int i = 0; i < totalClasses; i++) {
for (int j = i + 1; j < totalClasses; j++) {
// 准备当前两个类别的训练数据
Mat trainData;
Mat trainLabels;
for (size_t k = 0; k < trainingData.size(); k++) {
if (labels[k] == i + 1 || labels[k] == j + 1) { // 类别从1开始
for (const auto& point : trainingData[k]) {
Mat sample = (Mat_<float>(1, 2) << point.x, point.y);
trainData.push_back(sample);
trainLabels.push_back(labels[k] == i + 1 ? 1 : -1);
}
}
}
// 创建并训练SVM分类器
Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::LINEAR);
svm->setC(1.0);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 600, 1e-6));
svm->train(trainData, ROW_SAMPLE, trainLabels);
svmClassifiers[classifierIndex++] = svm;
}
}
}
// 预测玻璃纤维类别
vector<int> predict(const vector<Point2f>& centroids) {
vector<int> result;
for (const auto& centroid : centroids) {
// 创建投票数组
vector<int> votes(totalClasses, 0);
int classifierIndex = 0;
// 对每对类别进行预测并投票
for (int i = 0; i < totalClasses; i++) {
for (int j = i + 1; j < totalClasses; j++) {
Mat sample = (Mat_<float>(1, 2) << centroid.x, centroid.y);
float response = svmClassifiers[classifierIndex++]->predict(sample);
// 根据预测结果投票
if (response > 0) {
votes[i]++;
} else {
votes[j]++;
}
}
}
// 找出得票最多的类别
int maxVote = -1;
int predictedClass = -1;
for (int k = 0; k < totalClasses; k++) {
if (votes[k] > maxVote) {
maxVote = votes[k];
predictedClass = k + 1; // 类别从1开始
}
}
result.push_back(predictedClass);
}
return result;
}
// 检测断纱位置
vector<int> detectBrokenFibers(const vector<int>& predictedClasses, int totalFibers = 28) {
vector<bool> exist(totalFibers, false);
vector<int> brokenFibers;
// 标记已检测到的玻璃纤维
for (int cls : predictedClasses) {
if (cls >= 1 && cls <= totalFibers) {
exist[cls - 1] = true;
}
}
// 找出未检测到的玻璃纤维(断纱)
for (int i = 0; i < totalFibers; i++) {
if (!exist[i]) {
brokenFibers.push_back(i + 1); // 返回断纱位置(从1开始)
}
}
return brokenFibers;
}
};
这段代码体现了SVM多分类在实际应用中的具体实现。通过"一对一"策略,将复杂的多分类问题转化为多个简单的二分类问题,结合投票机制确定最终分类结果,实现了对玻璃纤维断开位置的准确识别。
重难点和创新点
难点
在基于机器视觉的玻璃纤维缠绕机断纱检测系统的开发过程中,我们遇到了多个技术难点,主要包括:
-
复杂工业环境下的图像处理:
- 难点:工业现场存在各种干扰因素,如光线变化、机械振动、灰尘污染等,影响图像质量
- 解决方案:通过选择合适的光源(HDL3系列条形光源配合漫射板)提供均匀照明,使用中值滤波有效去除噪声,结合形态学操作增强玻璃纤维轮廓,提高图像处理的鲁棒性
-
多根玻璃纤维的同时检测:
- 难点:系统需要同时检测28根密集排列的玻璃纤维,纤维之间间距小,容易产生粘连和误判
- 解决方案:通过精确设置ROI区域(1600×100像素),结合Canny边缘检测和轮廓提取算法,能够有效区分相邻的玻璃纤维;通过轮廓像素点个数阈值(170)过滤噪声,提高检测准确性
-
断纱位置的精确定位:
- 难点:不仅需要检测是否发生断纱,还需要精确定位具体是哪根玻璃纤维断开
- 解决方案:提出了基于SVM多分类的断纱位置识别方法,以玻璃纤维轮廓质心坐标为特征,通过"一对一"多分类策略和投票机制,实现了对28根玻璃纤维位置的准确识别。
创新点
-
检测方法的创新:
- 提出了基于轮廓像素点个数的断纱检测方法,通过设置合理的阈值(170),能够有效识别运动状态下玻璃纤维的断开情况
- 结合机器视觉技术和SVM多分类算法,实现了对多根玻璃纤维断纱的实时检测和精确定位,相比传统的机械式和传感器式检测方法,具有非接触、无损伤、精度高等优点
-
算法实现的创新:
- 提出了基于轮廓质心的特征提取方法,使用零阶矩和一阶矩计算玻璃纤维轮廓质心坐标作为SVM分类特征,特征维度低(二维),计算简单,同时具有平移不变性
- 采用SVM"一对一"多分类策略,构建378个二分类器,通过投票机制确定最终分类结果,实现了对28根玻璃纤维位置的准确识别
总结
本项目基于机器视觉技术,成功开发了一套玻璃纤维缠绕机断纱检测系统,实现了以下目标:
-
系统设计:根据玻璃纤维缠绕机的工作原理和断纱检测需求,设计了基于机器视觉的断纱检测方案,包括硬件选型(工业相机、镜头、光源)和软件架构设计。
-
图像处理:开发了完整的图像处理流程,包括ROI提取、中值滤波、二值化、形态学操作、边缘检测和轮廓提取,能够有效处理工业环境下的复杂图像。
-
算法实现:实现了基于SVM多分类的断纱位置识别算法,以玻璃纤维轮廓质心为特征,通过"一对一"多分类策略和投票机制,实现了对28根玻璃纤维位置的准确识别。
尽管本系统已经实现了基本功能并通过实验验证,但仍有一些方面可以进一步改进和完善:
-
算法优化:可以探索使用深度学习算法(如卷积神经网络)进一步提高断纱检测的准确率和鲁棒性,特别是在复杂干扰环境下
-
系统集成:可以将断纱检测系统与缠绕机控制系统进行深度集成,实现断纱自动停机和报警处理,提高自动化程度
-
界面优化:可以进一步完善上位机界面,增加更多的可视化功能和数据分析工具,提高系统的易用性和实用性
总之,基于机器视觉的玻璃纤维缠绕机断纱检测系统是一项具有重要实际应用价值的研究成果,为解决玻璃纤维缠绕过程中的断纱检测问题提供了一种有效的技术方案。随着机器视觉技术和人工智能算法的不断发展,该系统还有很大的改进和提升空间,有望在更多领域得到应用和推广。
参考文献
[1] Mortazavian S, Fatemi A. Effects of fiber orientation and anisotropy on tensile strength and elastic modulus of short fiber reinforced polymer composites[J]. Composites Part B, 2020, 193: 108051.
[2] Zhang C, Xu X, Fan C, et al. Literature Review of Machine Vision in Application Field[J]. E3S Web of Conferences, 2021, 236: 01012.
[3] Jiang T, Zhang G, Gao J. Illumination of a cylinder block transverse hole for machine vision inspection[J]. Chinese Optics, 2020, 13(6): 1232-1240.
[4] He Y, Zhang W, Li Y, et al. An approach for surface roughness measurement of helical gears based on image segmentation of region of interest[J]. Measurement, 2021, 183: 109734.
[5] Castro P S N, Borz S A. Improving the Event-Based Classification Accuracy in Pit-Drilling Operations: An Application by Neural Networks and Median Filtering of the Acceleration Input Signal Data[J]. Sensors, 2021, 21(18): 6195.
[6] Isono D, Zhang X, Cheng D, et al. Scale Adaptive Side Window Bilateral Filter[C]. International Workshop on Advanced Imaging Technology (IWAIT) 2021, 2021, 11766: 1176614.
[7] Shen G. Research on license plate recognition based on video image processing[C]. Proceedings of 2017 5th International Conference on Machinery, Materials and Computing Technology (ICMMCT 2017), 2017: 1127-1132.
[8] Said K A M, Jambek A B. Analysis of Image Processing Using Morphological Erosion and Dilation[J]. Journal of Physics: Conference Series, 2021, 2071(1): 012011.
617



被折叠的 条评论
为什么被折叠?



