基于深度学习和熔池图像对的焊缝熔透状态识别【附代码】

博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。

✅成品或者定制,扫描文章底部微信二维码。


(1) 双棱镜单摄像机被动立体视觉系统的设计与熔池图像采集

熔化极气体保护焊接过程中,焊缝的熔透状态直接影响焊接接头的质量和可靠性,准确检测熔透状态对于实现高质量自动化焊接具有重要意义。传统的熔透检测方法主要依赖熔池正面或背面的单一视角图像,难以获取熔池表面的完整三维形貌信息。本研究设计了一套基于双棱镜的单摄像机被动立体视觉系统,通过在单个工业相机镜头前方安装特制的双棱镜光学组件,将来自熔池表面的入射光线分为两束,在同一图像传感器上同时形成熔池的左右两个虚拟视图,从而实现单相机的立体成像。

该立体视觉系统的核心光学元件是由两块具有特定楔角的光学棱镜组成的双棱镜组件,两块棱镜相对安装,其楔角方向相反,使得通过左侧棱镜和右侧棱镜的光线产生不同方向的偏折。当熔池表面发出的光线经过双棱镜后,在相机传感器上形成具有一定视差的左右两幅图像,这两幅图像包含了熔池表面的立体信息。系统的标定采用张正友棋盘格标定法,通过在不同位置和姿态拍摄标定板图像,利用角点检测算法提取棋盘格角点坐标,然后通过非线性优化求解相机的内参数矩阵和外参数矩阵。由于双棱镜系统相当于两个虚拟相机,还需要额外标定两个虚拟相机之间的相对位置关系,包括旋转矩阵和平移向量。

在实际焊接实验中,采用冷金属过渡焊接工艺进行平板堆焊和V型坡口对接焊实验,通过调节焊接电流、焊接速度、送丝速度等工艺参数,获得不同熔透状态下的熔池立体图像。焊接过程中熔池表面温度极高且存在强烈弧光干扰,因此在图像采集时采用窄带滤光片滤除弧光波长以外的杂散光,同时选用高动态范围的工业相机以适应熔池表面的高亮度环境。采集到的原始图像首先进行图像分割,将左右两个虚拟视图分离,然后进行图像校正消除棱镜引入的畸变,最终得到可用于立体匹配的校正图像对。通过上述过程,建立了包含多种熔透状态的熔池立体图像数据集,为后续的深度估计和状态识别提供了数据基础。

(2) 基于变分优化的熔池表面稠密视差估计方法

立体匹配是从立体图像对中恢复场景深度信息的关键步骤,其目的是为左图像中的每个像素在右图像中找到对应的匹配点,从而计算视差值。熔池表面的立体匹配面临独特的挑战,主要体现在熔池表面呈现液态金属的镜面反射特性,纹理信息极度匮乏,传统的基于局部窗口匹配的方法难以获得准确的匹配结果。针对这一问题,本研究引入了一种基于变分框架的全局优化立体匹配算法,通过建立包含数据项和平滑项的能量函数,利用变分原理求解全局最优的稠密视差场。

能量函数的数据项用于度量左右图像对应像素之间的相似程度,采用基于灰度差异和梯度差异的混合代价函数。灰度差异项计算左图像像素与右图像对应位置像素的灰度绝对差值,梯度差异项则比较两个位置的图像梯度信息,两者加权组合形成最终的匹配代价。混合代价函数能够综合利用灰度和边缘信息,在纹理缺乏区域仍能提供一定的匹配约束。能量函数的平滑项用于施加空间连续性约束,基于相邻像素的视差值应该平滑变化的假设,采用全变分正则化项来惩罚视差场的剧烈变化。全变分正则化能够在保持视差不连续边缘(如物体边界)的同时实现平滑区域内的视差平滑。

能量函数的求解采用基于偏微分方程的变分迭代方法。首先推导能量函数极小化所对应的欧拉-拉格朗日方程,然后将其转化为时间演化的偏微分方程形式,通过数值迭代逐步逼近稳态解。在数值实现中,采用有限差分格式离散化偏微分方程,并使用高斯-赛德尔迭代或共轭梯度法加速收敛。为了进一步提高算法效率和准确性,采用由粗到精的多尺度策略,首先在低分辨率图像上求解初始视差估计,然后逐层上采样并细化视差结果。通过在自制的非标准凹面参照物上进行精度验证实验,结果表明重建的三维形貌在宽度方向的相对误差小于3.16%,深度方向的误差小于4.82%,达到了熔透状态识别所需的精度要求。

(3) 基于深度学习的熔透状态分类识别与可解释性分析

获得熔池表面的视差信息后,下一步任务是根据视差图像识别焊缝的熔透状态。本研究将熔透状态分为四类:未熔透、全熔透、过熔透和焊漏,这四种状态在熔池表面视差图上呈现出不同的形态特征。未熔透状态下熔池深度较浅,视差图中心区域的视差值相对较小;全熔透状态下熔池具有适当的深度,视差分布呈现规则的抛物面形态;过熔透状态下熔池深度过大,视差值整体偏大且分布不均匀;焊漏状态则表现为熔池中心区域出现异常的视差突变。为了实现自动化的熔透状态识别,本研究采用端到端的深度学习方法构建分类模型。

在立体匹配网络的选择上,采用金字塔立体匹配网络作为视差估计的主干网络。该网络采用空间金字塔池化模块聚合多尺度上下文信息,构建四维代价体积并通过三维卷积进行代价聚合,最后通过软argmin操作回归连续的视差值。网络首先在公开的立体匹配数据集上进行预训练,学习通用的立体匹配知识,然后在自制的熔池立体图像数据集上进行微调,适应熔池场景的特殊图像特性。为了提高模型在实际工业环境中的部署效率,在分类网络的选择上综合考虑识别精度和计算复杂度两个因素。通过对比VGG、ResNet、MobileNet等多种经典网络架构在该任务上的表现,最终选定18层残差网络作为分类器,其在测试集上达到了99.6%的分类准确率,同时具有较低的推理延迟

import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torchvision import models, transforms import numpy as np import cv2 class CostVolume(nn.Module): def __init__(self, max_disparity): super(CostVolume, self).__init__() self.max_disparity = max_disparity def forward(self, left_feat, right_feat): B, C, H, W = left_feat.shape cost_volume = torch.zeros(B, 2*C, self.max_disparity, H, W, device=left_feat.device) for d in range(self.max_disparity): if d == 0: cost_volume[:, :C, d, :, :] = left_feat cost_volume[:, C:, d, :, :] = right_feat else: cost_volume[:, :C, d, :, d:] = left_feat[:, :, :, d:] cost_volume[:, C:, d, :, d:] = right_feat[:, :, :, :-d] return cost_volume class StereoMatchingNetwork(nn.Module): def __init__(self, max_disparity=192): super(StereoMatchingNetwork, self).__init__() self.max_disparity = max_disparity self.feature_extractor = nn.Sequential( nn.Conv2d(3, 32, 3, 1, 1), nn.BatchNorm2d(32), nn.ReLU(), nn.Conv2d(32, 64, 3, 1, 1), nn.BatchNorm2d(64), nn.ReLU(), nn.Conv2d(64, 128, 3, 2, 1), nn.BatchNorm2d(128), nn.ReLU(), nn.Conv2d(128, 128, 3, 1, 1), nn.BatchNorm2d(128), nn.ReLU() ) self.cost_volume = CostVolume(max_disparity // 4) self.cost_aggregation = nn.Sequential( nn.Conv3d(256, 128, 3, 1, 1), nn.BatchNorm3d(128), nn.ReLU(), nn.Conv3d(128, 64, 3, 1, 1), nn.BatchNorm3d(64), nn.ReLU(), nn.Conv3d(64, 32, 3, 1, 1), nn.BatchNorm3d(32), nn.ReLU(), nn.Conv3d(32, 1, 3, 1, 1) ) def forward(self, left_img, right_img): left_feat = self.feature_extractor(left_img) right_feat = self.feature_extractor(right_img) cost = self.cost_volume(left_feat, right_feat) cost = self.cost_aggregation(cost).squeeze(1) disparity = self.soft_argmin(cost) return F.interpolate(disparity.unsqueeze(1), scale_factor=4, mode='bilinear').squeeze(1) * 4 def soft_argmin(self, cost): prob = F.softmax(-cost, dim=1) disp_range = torch.arange(0, cost.shape[1], device=cost.device).float() disp_range = disp_range.view(1, -1, 1, 1) disparity = torch.sum(prob * disp_range, dim=1) return disparity class PenetrationClassifier(nn.Module): def __init__(self, num_classes=4): super(PenetrationClassifier, self).__init__() self.backbone = models.resnet18(pretrained=True) self.backbone.conv1 = nn.Conv2d(1, 64, 7, 2, 3, bias=False) self.backbone.fc = nn.Linear(512, num_classes) def forward(self, disparity_map): return self.backbone(disparity_map) class VariationalStereoMatcher: def __init__(self, lambda_smooth=0.1, iterations=100): self.lambda_smooth = lambda_smooth self.iterations = iterations def compute_data_cost(self, left, right, d): h, w = left.shape shifted = np.zeros_like(right) if d < w: shifted[:, d:] = right[:, :-d] if d > 0 else right cost = np.abs(left.astype(float) - shifted.astype(float)) return cost def solve(self, left_img, right_img, max_disparity): if len(left_img.shape) == 3: left_gray = cv2.cvtColor(left_img, cv2.COLOR_BGR2GRAY) right_gray = cv2.cvtColor(right_img, cv2.COLOR_BGR2GRAY) else: left_gray, right_gray = left_img, right_img h, w = left_gray.shape disparity = np.zeros((h, w), dtype=np.float32) for i in range(self.iterations): for d in range(max_disparity): cost = self.compute_data_cost(left_gray, right_gray, d) update_mask = cost < self.compute_data_cost(left_gray, right_gray, int(disparity.mean())) disparity[update_mask] = d return cv2.GaussianBlur(disparity, (5, 5), 0) class WeldingDataset(torch.utils.data.Dataset): def __init__(self, image_pairs, labels, transform=None): self.image_pairs = image_pairs self.labels = labels self.transform = transform def __len__(self): return len(self.image_pairs) def __getitem__(self, idx): left_path, right_path = self.image_pairs[idx] left_img = cv2.imread(left_path, cv2.IMREAD_COLOR) right_img = cv2.imread(right_path, cv2.IMREAD_COLOR) if self.transform: left_img = self.transform(left_img) right_img = self.transform(right_img) return left_img, right_img, self.labels[idx] def train_pipeline(stereo_net, classifier, dataloader, epochs=50): optimizer_stereo = optim.Adam(stereo_net.parameters(), lr=0.001) optimizer_cls = optim.Adam(classifier.parameters(), lr=0.001) criterion = nn.CrossEntropyLoss() for epoch in range(epochs): for left, right, labels in dataloader: optimizer_stereo.zero_grad() disparity = stereo_net(left, right) optimizer_cls.zero_grad() predictions = classifier(disparity.unsqueeze(1)) loss = criterion(predictions, labels) loss.backward() optimizer_stereo.step() optimizer_cls.step() print(f'Epoch {epoch+1}/{epochs} completed') def visualize_attention(classifier, disparity_map, target_class): classifier.eval() disparity_map.requires_grad_(True) output = classifier(disparity_map) classifier.zero_grad() output[0, target_class].backward() gradients = disparity_map.grad.data attention_map = torch.mean(torch.abs(gradients), dim=1, keepdim=True) attention_map = F.interpolate(attention_map, size=disparity_map.shape[2:], mode='bilinear') return attention_map.squeeze().cpu().numpy() if __name__ == '__main__': stereo_net = StereoMatchingNetwork(max_disparity=192) classifier = PenetrationClassifier(num_classes=4) print("Welding penetration detection system initialized")


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1178468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

导入自己的听歌时长数据,统计每周听歌总时长,输出音乐风格偏好分析。

1. 实际应用场景描述场景某音乐爱好者使用音乐平台听歌&#xff0c;并导出自己的听歌记录&#xff08;日期、歌曲名、歌手、音乐风格、听歌时长&#xff09;。他希望&#xff1a;- 统计每周听歌总时长- 分析音乐风格偏好- 根据数据调整歌单&#xff0c;发现更多喜欢的音乐痛点-…

python基于Web技术的智能养老管理系统

目录基于Web技术的智能养老管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Web技术的智能养老管理系统摘要 随着人口老龄化加剧&#xff0c;传统养老模式面临资源分配不均、…

python基于大数据文化产业发展智能分析系统

目录基于大数据文化产业发展智能分析系统的摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于大数据文化产业发展智能分析系统的摘要 随着文化产业的快速发展&#xff0c;大数据技术成…

MySQL面试中,锁机制必问的5大问题!

文章目录MySQL中有哪几种锁&#xff1f;引言&#xff1a;为什么我们要聊锁&#xff1f;第一部分&#xff1a;MySQL中的锁类型1. 表级锁&#xff08;Table Lock&#xff09;示例&#xff1a;MyISAM 表的表级锁配置建议2. 行级锁&#xff08;Row Lock&#xff09;示例&#xff1a…

Questions for the Technical Advisory Board - 2

Elections 选举 Williams then posed a question to his fellow TAB members: with the (recently closed) TAB election, what do they want to see next year? What should the TAB be looking at? And for the non-TAB audience members: what conversations can the TAB…

前馈/反馈控制是什么

前馈/反馈控制是什么 在航天工程中&#xff0c;卫星姿态控制系统&#xff08;Attitude Control System, ACS&#xff09;是确保卫星正确指向、稳定运行和完成任务的核心子系统。无论是对地观测卫星精确对准地球表面&#xff0c;还是通信卫星将天线指向地面站&#xff0c;亦或是…

2025年市面上有实力的尘埃粒子计数器源头厂家排行榜,在线式粒子计数器/尘埃粒子检测仪供应厂家电话 - 品牌推荐师

随着工业4.0与智能制造的深度推进,洁净环境监测需求呈现爆发式增长。尘埃粒子计数器作为洁净车间、半导体制造、生物医药等领域的核心检测设备,其技术精度与稳定性直接影响生产质量与合规性。然而,市场鱼龙混杂,部…

2025年市场技术好的楼板搭建公司推荐,现浇楼梯/楼板现浇/钢筋混凝土现浇/现浇搭建/楼梯现浇,楼板搭建报价口碑推荐 - 品牌推荐师

随着城市化进程加速,楼板搭建作为建筑结构改造的核心环节,需求量持续攀升。然而,行业准入门槛低、施工标准参差不齐等问题,导致市场鱼龙混杂。业主在选择服务商时,往往面临“低价陷阱”“工期拖延”“质量隐患”等…

小程序 智能ai技术的基于Spring Boot的宠物(狗)健康管理的设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着宠物经济的快速发展&#xff0c;宠物健康管理需求日益增长。基于Spring Boot框架和智能AI技术&#xff0c;设计并实现了一…

全网最全自考必看!10款AI论文工具测评TOP10

全网最全自考必看&#xff01;10款AI论文工具测评TOP10 2026年自考论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文工具在学术写作中的应用越来越广泛。对于自考学生而言&#xff0c;撰写高质量论文不仅是学业要求&am…

【开题答辩全过程】以 基于微信小程序健康跑平台的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

python网络招聘信息分析系统的设计与实现 boss直聘 爬虫 技术的猎聘数据可视化分析

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着互联网招聘平台的普及&#xff0c;网络招聘信息分析系统成为企业招聘和求职者决策的重要工具。基于Python的网络招聘信息分…

【开题答辩全过程】以 基于Android的高校员工考勤系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

SKF轴承动力学仿真信号分析代码功能说明

ANSYS WORKBENCH轴承动力学仿真&#xff0c;ANSYS做内圈、外圈和滚子故障的模拟图片为凯斯西储大学SKF轴承内外圈故障的结果&#xff0c;振动加速度包络后故障特征频率可以与实验相差仅为5%。一、代码整体概述 本次分析的代码集源自SKF轴承动力学仿真模型&#xff0c;包含3个核…

URL地址末尾加不加”/“有什么区别

URL 结尾是否带 / 主要影响的是 服务器如何解析请求 以及 相对路径的解析方式&#xff0c;具体区别如下&#xff1a;1. 基础概念URL&#xff08;统一资源定位符&#xff09; &#xff1a;用于唯一标识互联网资源&#xff0c;如网页、图片、API等。目录 vs. 资源&#xff1a;以 …

珲春好吃的烤肉哪家好吃

珲春好吃的烤肉&#xff0c;延炭乳酸菌烤肉不容错过在珲春&#xff0c;烤肉是当地美食文化的重要组成部分&#xff0c;众多烤肉店各有特色。而延炭乳酸菌烤肉凭借其独特的健康理念和美味菜品脱颖而出&#xff0c;成为食客们的心头好。主打健康&#xff0c;腌制独特延炭乳酸菌烤…

AI数据报告产品在文旅景区运营中的实践与技术搭建

AI数据报告产品在文旅景区运营中的实践与技术搭建pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

【小程序毕设源码分享】基于springboot+微信小程序的面向小学生的阅读交流系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【小程序毕设全套源码+文档】基于微信小程序的学生定位考勤系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026 年水质检测仪采购清单:手持式、台式、固定式设备品牌全解析 - 品牌推荐大师1

2026年水质检测仪采购清单:手持式、台式、固定式设备品牌全解析 随着全球对水资源安全与环境保护重视程度的不断提升,水质检测技术已从实验室走向现场、从人工走向自动化。在当前市场中,水质检测仪种类繁多,功能各…