问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

毕业设计:基于图像处理技术的PCBA板缺陷自动检测系统

创作时间:
作者:
@小白创作中心

毕业设计:基于图像处理技术的PCBA板缺陷自动检测系统

引用
CSDN
1.
https://m.blog.csdn.net/ASASASASASASAB/article/details/146016994

大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。本文将分享一个基于图像处理技术的PCBA板缺陷自动检测系统的完整设计方案,帮助大家顺利完成毕业设计。

项目背景

随着电子产品的快速发展,印刷电路板作为电子设备的核心组成部分,其质量直接影响到产品的性能和可靠性。传统的PCBA板缺陷检测方法多依赖于人工目视检查,工作效率低下且容易出现误判和漏判。通过利用深度学习技术,可以实现对PCBA板缺陷的高效、准确检测,从而提高生产效率,降低生产成本,并提升最终产品的质量。

数据集

数据采集阶段包括自主拍摄和从互联网获取相关图像,使用了LabelImg进行标注,标注过程由经验丰富的工程师执行,以确保标注的准确性和有效性。每张图像中的缺陷区域都经过仔细审核,标注结果会被记录为相应的标签文件,例如XML格式。这些标签文件将用于后续训练过程中的监督学习,确保模型能够准确识别和定位板上的缺陷。

数据集按照一定比例进行划分,其中训练集占总数据集的70%-80%,测试集占10%-15%,而剩余部分作为验证集。 为了提高模型的表现,采用数据扩展技术,如旋转、翻转和缩放等,以增加样本的多样性。不仅能够帮助模型更好地适应不同的输入条件,还能有效防止过拟合,提高模型在实际应用中的鲁棒性和泛化能力。

设计思路

PCBA板缺陷自动检测系统中,图像预处理是关键步骤之一,其中图像滤波常用的方法包括均值滤波、中值滤波和高斯滤波,这些方法都旨在有效降低图像噪声,提高后续缺陷检测的准确性。

均值滤波是一种经典的图像平滑技术,它通过计算PCB图像某个区域内像素值的平均值来实现降噪。均值滤波的实现依赖于指定的窗口大小,常用的窗口尺寸有3×3、5×5和7×7。选择合适的窗口形状和大小可以优化滤波效果。具体而言,均值滤波的过程是通过计算窗口区域内所有像素的平均值,并将该均值替换窗口中心的像素值,从而平滑图像,减少噪声干扰。

中值滤波是一种非线性滤波方法,它通过对窗口内像素值进行排序并取中值来进行平滑处理。与均值滤波不同,中值滤波能够更有效地去除椒盐噪声,而不会模糊边缘。中值滤波同样需要设定窗口模板,其大小可以为3×3、5×5或7×7。适当选择窗口大小是至关重要的,过大的窗口会导致图像模糊,而过小的窗口可能无法有效去噪。中值滤波的基本过程是,针对每个像素,提取其邻域像素值,排序并找出中间值,然后用该中值替换当前像素值。中值滤波的优点在于它不受极端值的影响,因此在很多场景下表现优于均值滤波。

高斯滤波是一种加权平均滤波器,能够有效地处理由于光照变化引起的噪声。高斯滤波根据高斯分布来加权邻域像素,计算加权平均值。滤波过程中,窗口模板的大小通常设定为(2n+1)×(2n+1),并使用标准差σ来控制高斯分布的形状。高斯滤波的加权平均值w(x,y)可表示为:

在PCBA板缺陷自动检测系统中,表面缺陷检测的算法理论主要包括参考对比法、非参考对比法和混合方法。这三种方法各具特点,适用于不同的检测场景。在图像处理过程中,经过配准和二值化处理后的PCB图像能够有效减少后续图像异或运算的计算量。此时,得到的二值化图像信息仅包含两个像素值:0代表黑色,1代表白色。形态学处理是一种重要的图像分析技术。形态学方法主要用于提取和修改图像特征,常用的操作包括腐蚀、膨胀、开运算和闭运算。不同操作的顺序会影响最终结果。

腐蚀操作能够有效去除较小的误差缺陷,减小目标区域的尺寸。膨胀运算则是与腐蚀操作相反,在膨胀过程中,当结构元素与图像中的任何一个像素相交时,目标像素被标记为1。膨胀运算能够填充目标区域内的小非目标像素,从而增强目标的显示。开运算结合了腐蚀和膨胀的操作,开运算首先对图像进行腐蚀,然后再进行膨胀。这个过程能够去除图像中的小毛刺,并平滑缺陷边缘,使得最终的检测结果更加可靠。

通过上述形态学处理,结合图像异或运算,能够有效消除PCB图像细微的误差,提升缺陷检测的精度,使得缺陷边缘更加顺滑,从而为后续的处理和分析提供更为清晰的基础。

数据准备

数据准备是模型训练的基础。首先,需要收集PCB板的图像数据,这些图像可以来自于生产线的摄像头或其他图像采集设备。接下来,对这些图像进行标注,标注明确哪些区域是缺陷,哪些是正常区域。标注工作可以使用工具如LabelImg等完成,并将结果保存为适合模型训练的格式,如XML或JSON。

import os
import cv2
import numpy as np

# 假设我们有一个包含图像的目录
image_dir = "path/to/images"
annotations_dir = "path/to/annotations"

# 读取图像
def load_images_and_annotations(image_dir, annotations_dir):
    images = []
    annotations = []
    for filename in os.listdir(image_dir):
        if filename.endswith('.jpg'):
            img = cv2.imread(os.path.join(image_dir, filename))
            images.append(img)
            # 读取对应的标注
            annotation = np.loadtxt(os.path.join(annotations_dir, filename.replace('.jpg', '.txt')))
            annotations.append(annotation)
    return images, annotations

images, annotations = load_images_and_annotations(image_dir, annotations_dir)

图像预处理

在数据准备完成后,接下来需要对图像进行预处理。预处理的步骤包括图像的归一化、增强和滤波等操作,这些操作有助于提升模型的学习效果和准确性。常用的预处理方法包括图像缩放、均值滤波和高斯滤波等,以去除噪声并提高图像的质量。

def preprocess_images(images):
    processed_images = []
    for img in images:
        # 转换为灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 归一化
        norm_img = gray / 255.0
        # 高斯滤波去噪
        filtered_img = cv2.GaussianBlur(norm_img, (5, 5), 1.5)
        processed_images.append(filtered_img)
    return processed_images

processed_images = preprocess_images(images)

模型训练

构建适合的深度学习模型。常用的模型包括卷积神经网络(CNN)和基于YOLO等目标检测算法。根据任务的复杂性和数据的特点,选择合适的网络结构,并配置相应的超参数。将训练集输入模型进行训练。设置适当的训练参数(如批量大小、学习率等),并使用验证集监控模型的训练过程,以防止过拟合。

import tensorflow as tf
from tensorflow.keras import layers, models

def create_model(input_shape):
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Flatten())
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(1, activation='sigmoid'))  # 二分类
    return model

model = create_model((128, 128, 1))  # 假设输入图像为128x128灰度图
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

模型评估

模型训练完成后,需要使用测试集对模型进行评估。通过计算准确率、召回率、F1得分等指标来分析模型的性能,从而判断其在实际应用中的有效性。在模型评估后,可以将其应用于实际的PCBA板缺陷检测中。如果模型在实际运行中表现不佳,则需进行模型的优化与调整,包括改变网络结构、调整超参数、增加数据集等。

test_loss, test_accuracy = model.evaluate(np.array(test_images), np.array(test_annotations))
print(f"Test Accuracy: {test_accuracy:.2f}")




© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号