Python课设CV方向——轮胎 X 光图像缺陷检测系统设计

Python课设CV方向——轮胎X光图像缺陷检测系统设计

记录计算机视觉课上完成的两个课设,这是其一,全部采用传统CV方法写成,感兴趣的小伙伴请多多来交流(可接python课设)

一、研究背景与意义

根据我国公安部交通管理局的数据,自2013年以来,我国汽车保有量每年平均增加约2000万辆。这一显著增长不仅反映了我国汽车产业的蓬勃发展,同时也表明了高质量轮胎需求的快速上升。轮胎作为汽车唯一与地面接触的部件,直接影响着车辆的安全性和性能。据统计,高速公路上约35%的交通事故与轮胎失效有关,其中约70%由爆胎引发。由此可见,轮胎的缺陷和故障已成为导致交通事故的关键因素之一。确保轮胎的质量,不仅对于减少交通事故具有重要作用,更是保障行车安全的基础。尤其是在轮胎内部结构缺陷的检测上,科学的检测手段和高效的质量控制是确保轮胎安全性的核心环节。
在这里插入图片描述

子午线轮胎(Radial Tire)作为一种现代充气轮胎,其帘布层与胎冠中心线呈约90度排列,通过带束层紧密固定,呈现出显著的结构特点。子午线轮胎因其优异的接地面积、附着力、缓冲性和散热性,被广泛应用于各类车辆。其名称来源于帘线排列方式类似于地球的子午线,因此又被称为“子午胎”。该轮胎的主要结构包括胎冠、胎肩、胎侧、胎圈和胎面,各部分各司其职,共同构成了轮胎的整体性能。如图所示,胎面为轮胎与地面的直接接触部分,其表面设计的凹槽和花纹提升了抓地力、排水性和静音效果。胎面的内层由帘布层和带束层组成,形成胎冠并提供必要的支撑和抗变形能力。胎肩作为连接胎面和胎侧的部分,兼具散热和减震功能,有助于轮胎在转弯时承受形变和高负荷。胎侧则是轮胎最易损坏的区域,负责支撑轮胎并吸收路面冲击,同时影响散热效果。胎圈由坚固的胎圈芯和包布构成,确保轮胎稳固附着于轮辋上,避免行驶和转弯时脱落。相较传统斜交轮胎,子午线轮胎具有更高的承载力、优良的减震性、较低的滚动阻力和更长的使用寿命。这些性能优势使其特别适合于高速公路行驶和重载运输等严苛工况。

二、轮胎 X 射线图像及内部缺陷分析

胎肩和胎侧区域主要由少量的水平钢丝帘线层和少量表面纹理的橡胶构成。
由于这些区域的材料相对较薄,且钢丝帘线的数量较少,X 射线穿透后衰减较低,因此在成像图中呈现较高的灰度值。这种高灰度值反映了感光器件接收到更多的透射光线,表明这些区域的密度较低且均匀。本文主要分析胎侧区域出现的缺陷为主,轮胎的胎侧内部缺陷主要可以分为三类:结构类缺陷、杂物类缺陷、气泡类缺陷。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、需求分析

基于上述分析,开发基于子午线轮胎 X 光图像的自动化缺陷检测系统不仅能够显著提升检测效率和准确性,减少人为因素的干扰,还能通过图像处理技术的结合,实现对复杂轮胎缺陷模式的精准识别。为确保系统能够有效满足工业生产的实际需求,子午线轮胎 X 光图像自动化缺陷检测系统需具备一系列功能需求:
(1)缺陷检测
系统应能够对轮胎的 X 光图像进行自动化缺陷检测,识别出包括胎侧帘线断裂、帘线密集等多种常见缺陷类型。检测过程应能够在复杂的图像背景中区分正常结构与缺陷区域,确保检测结果的准确性和可靠性。
(2)缺陷分类
在检测到缺陷后,系统应具备对缺陷进行分类的能力,能够根据缺陷的形态、大小、位置和其他特征将其归类为特定的缺陷类型。分类功能不仅有助于快速识别和处理不同类型的缺陷,还为后续的质量控制和生产优化提供数据支持。
(3)缺陷定位
系统应能够准确定位检测到的缺陷,在图像中标记出缺陷的具体坐标信息,便于后续的质量检查和问题追溯。这一功能对于精确判断缺陷的影响范围以及快速采取修复措施至关重要。
(4)数据存储与管理
系统应能够对处理后的图像和检测结果进行存档管理,支持数据的长期保存和快速检索。存档的图像应包含检测到的缺陷标记和分类结果,以便于后续的质量分析和历史数据比较。同时,系统应提供方便的数据导出功能,以满足不同用户的需求。

四、系统设计

该子午线轮胎帘线缺陷检测系统结构由前端和后端两部分构成,旨在实现轮胎缺陷检测的功能。前端采用 HTML、CSS 技术,负责用户界面设计和交互功能,如文件上传和图像预览等;后端基于 Python 的 Flask 框架,主要负责接收用户请求、处理图像文件以及返回检测结果。图像处理逻辑通过编写的 Python 文件实现,在上传的轮胎图像中识别并标记缺陷。系统通过前端与用户交互,后端进行数据处理和逻辑计算,最终在前端显示检测结果,形成一个完整的闭环数据流转过程,实现了从图像数据获取、处理到结果反馈的全流程自动化功能。
在这里插入图片描述

五、算法设计与分析

图像灰度分布与噪声平滑

在确定帘线边界线之前,需对图像进行预处理。本文采用基于灰度值的高噪声平滑方法,专注于处理灰度分布曲线上的高频
噪声,通过提高或降低噪声处的灰度值,达到平滑图像的效果。

def find_extrema(column):
    minima = np.where((column[1:-1] < column[:-2]) & (column[1:-1] < column[2:]))[0] + 1
    maxima = np.where((column[1:-1] > column[:-2]) & (column[1:-1] > column[2:]))[0] + 1
    return minima, maxima
def smooth_convex_minima(column, maxima):
    for i in range(len(maxima) - 1):
        if maxima[i + 1] - maxima[i] == 2:
            middle = maxima[i] + 1
            # 设置为其两侧极大值点灰度值的平均值
            column[middle] = (column[maxima[i]]//2+ column[maxima[i + 1]]//2)
    return column
def smooth_convex_minima_two_pixels(column, maxima):
    for i in range(len(maxima) - 1):
        if maxima[i + 1] - maxima[i] == 3:  # 间隔两个像素意味着三个索引单位
            if column[maxima[i] + 2] < column[maxima[i] + 1]:
                minima_pos = maxima[i] + 2
            else:
                minima_pos = maxima[i] + 1
            # 设置为其两侧极大值点灰度值中的较小值
            column[minima_pos] = (column[minima_pos-1]//2+ column[minima_pos+1]//2)
    return column
def process_column(column):
    minima, maxima = find_extrema(column)
    column = smooth_concave_maxima(column, minima)
    minima, maxima = find_extrema(column)  # 再次查找极值
    column = smooth_convex_minima(column, maxima)
    minima, maxima = find_extrema(column)  # 再次查找极值
    column = smooth_convex_minima_two_pixels(column, maxima)
    minima, maxima = find_extrema(column)  # 再次查找极值
    column = smooth_convex_minima_two_pixels(column, maxima)    
    return column
def iterative_smoothing(image, max_iterations=10):
    for iteration in range(max_iterations):
        prev_image = image.copy()
        image = process_image(image)
        if np.array_equal(image, prev_image):
            break
    print(f"Total iterations: {iteration + 1}")
    return image    

区域定位算法

交叉帘线和水平帘线可通过凹线段的相对幅值进行区分。经过对无交叉区明暗背景交替区域的图像及其绝对幅值数组分析,越靠近中间无交叉区的图像列,其明背景与暗背景反差越大,灰度值差异显著,凹线段的相对幅值整体较大,且灰度值数据分布较为密集;而在有交叉区内,凹线段的相对幅值整体较小,数据分布更为分散,规律性较差。

轮胎胎侧帘线提取算法

图像增强
 clahe = cv2.createCLAHE(clipLimit=5.0, tileGridSize=(8, 8))
 equalized_image = clahe.apply(image_slice)
图像滤波
 kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
 sharpened_image = cv2.filter2D(equalized_image, -1, kernel)
 # denoised_image = cv2.medianBlur(sharpened_image, 3)  
 sigma = 0.75
 ksize = (3, 3)
 blurred_image = cv2.GaussianBlur(sharpened_image, ksize, sigma)
帘线提取

滤波后,本研究对灰度分布曲线上的极小值点进行了二值化提取。

def find_binary(image, threshold=100):
    minima = np.full_like(image, 255)
    for col in range(image.shape[1]):
        column_data = image[:, col]
        peaks, _ = find_peaks(-column_data)
        for peak in peaks:
            if column_data[peak] < threshold:
                minima[peak, col] = 0
    return minima
平滑孤立点

孤立噪点与水平帘线的主要区别在于其邻域内不存在任何标记点。因此,本研究采用空间滤波方法来去除这些孤立噪点。

for i in range(2, binary_image.shape[0] - 2):
    for j in range(2, binary_image.shape[1] - 2):
        neighborhood_3x3 = binary_image[i-1:i+2, j-1:j+2]
        neighborhood_4x4 = binary_image[i-1:i+3, j-1:j+3]
        neighborhood_5x5 = binary_image[i-2:i+3, j-2:j+3]
        if binary_image[i, j] == 0 and np.sum(neighborhood_3x3 == 0) == 1:
            binary_image[i, j] = 255
        if binary_image[i, j] == 0 and np.sum(neighborhood_4x4 == 0) == 2:
            binary_image[i, j] = 255
            if binary_image[i+1, j] == 0:
                binary_image[i+1, j] = 255
            if binary_image[i, j+1] == 0:
                binary_image[i, j+1] = 255
        if binary_image[i, j] == 0 and np.sum(neighborhood_5x5 == 0) == 3:
            binary_image[i, j] = 255
            if binary_image[i+1, j] == 0:
                binary_image[i+1, j] = 255
            if binary_image[i, j+1] == 0:
                binary_image[i, j+1] = 255
            if binary_image[i+1, j+1] == 0:
                binary_image[i+1, j+1] = 255

写到这儿,关于图像的预处理部分就终于完成了,接着就可以开始检测缺陷了

帘线稀开缺陷检测算法

本文针对轮胎胎侧区域的帘线稀疏缺陷和胎冠区域的帘线断裂缺陷,分别设计了缺陷检测方法。胎侧区域帘线稀疏缺陷的特征主要表现为相邻帘线间距的异常变化,从图中可以看出缺陷帘线之间的间距显著大于正常帘线间的间距。因此,本文利用垂直方向直方图统计方法来选择标准间距并通过正态分布原则检测缺陷。
在数字图像处理中,直方图是一种常用的分析工具。统计学中的直方图是用来表示数据分布的图形,一种二维统计图表。在数字图像处理中,图像直方图用于表示图像中灰度分布的情况,反映了各个灰度值在图像中出现的频数。本文的缺陷检测方法借鉴了数字图像直方图的概念,统计的直方图中,横轴表示选择的特征值大小,纵轴表示该特征值的出现频数。
直方图数据呈现出近似正态分布,并且样本数据量较大,因此本节缺陷检测采用了正态分布 3σ准则。

帘线交叉与密集缺陷检测算法

帘线交叉与密集的检测原理与帘线稀线检测原理相同,当代表帘线的黑色像素间距过小时,可以认为此处出现了帘线密集的缺陷,同理,帘线交叉可以看为局部帘线密集。此类型的缺陷检测同样采用了正态分布 3σ准则,当间隔小于μ − 3σ − 1.2 的部分用方框线标记,结果图如下所示:

六、界面设计

依据前面部分的系统结构说明,本项目在 PC 端进行了实现,可视化 HTML页面使用上文介绍的 Flask 框架搭建。运行 Flask 应用并访问所设定网址http://127.0.0.1:5000/进入“子午线轮胎帘线区域缺陷检测”页面,可依据按钮提示上传子午线轮胎帘线 X 光透射图片并进行分析。
在这里插入图片描述

七、测试问题分析

经过对 271 张子午线轮胎 X 光图像进行稀线和开线检测,针对胎侧密集缺陷的漏检率为22.92%,其余两项漏检率均为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值