利用图像识别给CAD图纸找不同

 
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:传知代码论文复现

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

​​

​​

目录

一、背景及意义介绍

背景介绍

意义介绍

二、概述

三、论文思路

具体步骤

四、方法介绍

基于图像处理的CAD图纸比对算法的方法介绍

五、复现过程

(1)CAD图纸转换为PDF

(4)差值比对

(5)腐蚀膨胀

部署方式


本文所有资源均可在该地址处获取。

一、背景及意义介绍

背景介绍

  • 工程领域对图纸准确性要求高
    • 在工程设计和施工中,CAD图纸是非常关键的文件,它包含了工程的各种详细设计信息,如建筑结构、机械零件的尺寸和形状、电气线路的布局等。这些信息的准确性直接关系到工程的质量、安全、进度和成本。
    • 例如,在建筑工程中,如果建筑图纸的尺寸标注错误,可能导致建筑物的结构不稳定;在机械制造中,零件图纸的形状误差可能使零件无法正常装配。
  • 图纸比对工作的现状及问题
    • 目前,图纸比对工作主要依赖人工进行。设计人员或审核人员需要手动对照两张图纸,逐一对各个图元(如线条、图形、标注等)进行检查,以确定是否存在差异。
    • 这种人工比对方式存在诸多弊端。首先,效率极低,尤其是对于复杂的大型工程图纸,人工比对可能需要耗费大量的时间和精力。其次,容易受到主观因素的影响,如审核人员的疲劳、注意力不集中、个人经验和判断标准的差异等,这些因素都可能导致比对结果出现错误或遗漏。

意义介绍

  • 提高图纸比对效率和准确性
    • 基于图像处理的CAD图纸比对算法能够实现自动化的图纸比对过程。通过一系列图像处理技术,算法可以快速、准确地检测出两张图纸之间的差异,大大提高了比对工作的效率。
    • 与人工比对相比,算法不受主观因素的影响,能够提供更加客观、一致的比对结果,减少了因人为错误导致的工程风险。
  • 保障工程质量和安全
    • 通过及时发现图纸中的差异和错误,施工团队可以在施工前对图纸进行修正,避免按照错误的图纸进行施工,从而保障工程的质量和安全。
    • 例如,如果在比对过程中发现结构图纸中的某个关键支撑构件的尺寸发生了变化,施工方可以及时与设计方沟通,确保施工的准确性。
  • 辅助设计工作和优化设计方案
    • 该算法对于设计人员也具有重要的辅助作用。在设计过程中,设计师可能会对图纸进行多次修改,通过使用比对算法,可以快速了解每次修改的具体内容,有助于设计师更好地跟踪设计思路,优化设计方案。
    • 比如,设计师可以通过比对不同版本的图纸,发现哪些部分进行了调整,从而评估这些调整对整体设计的影响,进一步完善设计。

二、概述

本算法旨在对 CAD 图纸进行比对,通过一系列图像处理步骤,包括格式转换、边缘切割对齐、去噪、差值比对、腐蚀膨胀和标注归一,快速发现两幅 CAD 图纸之间的差异。原文地址:https://kns.cnki.net/kcms2/article/abstract?v=QenloEQs_R_P8kxDecokeBUD05QHydGF4xG_296KoAoDsp8OX7i3Q7IeoGFGj8KFvSSH-Re2Tuqm4QoRztSGCbWOodm65_GtpA1zMPijQCGheGM5ScU36ndre7Gv3rHLdvTX1nkIljt84rKdxM91ntHDJ4FfimYaVw5obiB1zsw=&uniplatform=NZKPT

三、论文思路

为解决人工比对 CAD 图纸效率低且易受主观因素影响的问题,提出一种基于图像处理的 CAD 图纸比对算法,通过一系列图像处理步骤实现自动比对,快速发现图纸差异。

具体步骤

  1. 格式转换
    • 将CAD图纸(如DWG)转PDF,保证一致,调用虚拟打印驱动设置参数。
  2. 边缘切割对齐
    • 因图纸可能有白边和倾斜,先边缘检测,再轮廓或直线检测算外接矩形,接着算角度和中心旋转图像,重复检测确定区域后裁剪。
  3. 高斯滤波去噪
    • 针对图纸噪声,用高斯滤波,按分布特性给像素加权抑制噪声保留细节。
  4. 差值比对
    • 用图像减法找差异,相减结果二值化,用滑动窗口分析消除误差。
  5. 腐蚀膨胀
    • 针对比对误检漏检,腐蚀取邻域最小值消除噪声点,膨胀取最大值填补空洞。
  6. 标注归一
    • 可视化差异,分割图像标记,合并框后在CAD图纸标记。

四、方法介绍

基于图像处理的CAD图纸比对算法的方法介绍

  1. CAD图纸格式转换

    • 方法:选用将CAD图纸(如常见的DWG格式)转换为PDF文件。通过调用CAD软件的PDF虚拟打印驱动来实现,在转换过程中需要设置合适的分辨率、尺寸、范围等参数,以确保转换后的PDF文件与原始CAD文件在图形数据和视觉属性上完全一致。
  2. 图纸边缘切割对齐

    • 方法
      • 边缘检测:使用OpenCV的cv2.Canny()函数对图像进行边缘检测,找出图像中像素值发生明显变化的地方,即边缘。
      • 轮廓或直线检测及外接矩形计算:接着使用cv2.findContours()函数或cv2.HoughLines()函数进行轮廓或直线检测,并使用cv2.boundingRect()函数或cv2.minAreaRect()函数计算能够包含图像中的轮廓或直线的最大外接矩形。
      • 旋转角度和中心计算:然后使用cv2.minAreaRect()函数或math.atan2()函数计算旋转角度和中心,以便将图纸旋转到水平方向,使最大外接矩形与水平方向对齐。
      • 图像旋转:通过cv2.getRotationMatrix2D()函数生成旋转矩阵,并使用cv2.warpAffine()函数对图像进行仿射变换,实现图像旋转。
      • 再次检测和裁剪:对旋转后的图像再次进行边缘检测、轮廓或直线检测以及最大外接矩形计算,以更准确地确定图纸中有效区域的范围和位置。最后根据cv2.boundingRect()函数或cv2.minAreaRect()函数返回的信息裁剪图像,去除空白边缘。
  3. 高斯滤波去噪

    • 方法:采用高斯滤波这种线性平滑滤波方法。根据高斯分布的特性,给予靠近均值的像素较高的权重,而给予远离均值(即可能受到噪声影响)的像素较低的权重。具体计算过程为:首先根据给定的标准差σ和卷积核大小计算高斯核矩阵,然后将原始图像扩展为边缘填充后的图像,使得卷积后的图像大小不变。对于扩展后的图像中的每一个像素点,将其邻域与高斯核矩阵进行卷积运算,得到新的像素值,所有新的像素值组成一个新的图像,即为高斯滤波后的图像。
  4. 差值比对

    • 方法:采用图像减法的方法,将其中一张图像作为被减数,另一张图像作为减数,对它们进行逐像素的相减运算。如果两张图像在某个像素点上完全相同,那么相减后得到的结果就是0值;如果两张图像在某个像素点上有差异,那么相减后得到的结果就是非0值。将相减后得到的结果图像进行二值化处理,即将非0值转换为255值,将0值保持不变,得到一张黑白的二值图像,其中白色代表两张原始图像有差异的区域,黑色代表两张原始图像无差异的区域。由于CAD图纸中可能存在一些细微的误差或噪声,引入一个3×3的滑动窗口,用来对二值图像进行区域分析。具体来说,将滑动窗口从左上角开始,在二值图像上逐行扫描,每次移动一个像素点。对于每个滑动窗口内的9个像素点,统计其中0值和255值的个数。如果在3×3的区域内,0值的个数少于三分之二,说明这一区域有差异,就将这一区域全部置为0值(即黑色);如果在3×3的区域内,0值的个数大于等于三分之二,说明这一区域无差异,就将这一区域全部置为255值(即白色)。
  5. 腐蚀膨胀

    • 方法
      • 腐蚀:对图像进行腐蚀操作,腐蚀是一种收缩操作,它取每一个位置的矩形邻域内值的最小值作为该位置的输出灰度值。通过腐蚀操作,可以消除小区域内的噪声或误检点。
      • 膨胀:接着对腐蚀后的图像进行膨胀操作,膨胀是一种扩张操作,它取每一个只位根据前面的腐蚀操作所确定的位置,取其邻域内值的最大值作为该位置的输出灰度值。通过膨胀操作,可以填补小区域内的空洞或漏检点。
  6. 标注归一

    • 方法:首先利用图像分割的方法,将图像中的黑点区域与白色背景区域分开,并用圆形框标记出来。然后将细小的长条框去除,将相邻或重叠的来自不同圆形框的长条框合并为一个,以减少框的数量和提高识别的准确性。最后将处理后的图像与原始CAD图纸进行比对,将框出的黑点区域在CAD图纸上用相同的颜色和形状标记出来,以便于观察和分析。

五、复现过程

(1)CAD图纸转换为PDF

  1. 步骤说明
    • 由于CAD图纸可能存在多种格式且有兼容性问题,选择将其转换为PDF格式以便后续处理。转换过程需调用CAD的PDF虚拟打印驱动,并设置相关参数(分辨率、尺寸、范围等)。
  2. 代码实现(示例为手动转换后的读取操作)
import cv2

# 读取转换后的PDF图像(假设已转换为可识别的图像格式,如JPEG或PNG)
image1 = cv2.imread('image1.jpg')  # 第一张图纸图像
image2 = cv2.imread('image2.jpg')  # 第二张图纸图像

(2)图纸边缘切割对齐

  1. 步骤说明
    • 由于CAD图纸在制作或扫描过程中可能存在白色边缘空白区域且图像可能倾斜,需要进行边缘检测、轮廓发现或直线检测,计算最大外接矩形,确定旋转角度和中心,旋转图像,再次检测并裁剪,以去除空白区域并实现对齐。
  2. 代码实现
def edge_cutting_and_alignment(image):
    edges = cv2.Canny(image, 100, 200)
    contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    rect = cv2.boundingRect(max(contours, key=cv2.contourArea))
    angle = cv2.minAreaRect(max(contours, key=cv2.contourArea))[2]
    center = (rect[0] + rect[2] // 2, rect[1] + rect[3] // 2)
    rotated_image = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated_image = cv2.warpAffine(image, rotated_image, (image.shape[1], image.shape[0]))
    cropped_image = rotated_image[rect[1]:rect[1] + rect[3], rect[0]:rect[0] + rect[2]]
    return cropped_image

gray_image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
gray_image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
aligned_image1 = edge_cutting_and_alignment(gray_image1)
aligned_image2 = edge_cutting_and_alignment(gray_image2)

(3)高斯滤波去噪

  1. 步骤说明
    • 为提高图像质量,采用高斯滤波方法。利用高斯分布特性,给予不同像素不同权重,抑制噪声同时保留边缘和细节。
  2. 代码实现
def gaussian_filtering(image):
    return cv2.GaussianBlur(image, (3, 3), 0)

filtered_image1 = gaussian_filtering(aligned_image1)
filtered_image2 = gaussian_filtering(aligned_image2)

(4)差值比对

  1. 步骤说明
    • 通过图像减法计算两幅图像在相同位置上像素值的差异,对结果进行二值化处理,再利用滑动窗口消除因噪声或误差导致的误判,突出差异区域。
  2. 代码实现
def difference_comparison(image1, image2):
    diff = cv2.absdiff(image1, image2)
    _, binary_diff = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
    return binary_diff

diff_image = difference_comparison(filtered_image1, filtered_image2)

(5)腐蚀膨胀

  1. 步骤说明

    腐蚀操作

    膨胀操作
    • 由于差值比对可能产生误检或漏检情况,对差异图进行腐蚀和膨胀操作。腐蚀消除小区域内噪声或误检点,膨胀填补空洞或漏检点,提高检测准确性和稳定性。
  2. 代码实现
def erosion_and_dilation(image):
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    eroded_image = cv2.erode(image, kernel, iterations=1)
    dilated_image = cv2.dilate(eroded_image, kernel, iterations=1)
    return dilated_image

processed_image = erosion_and_dilation(diff_image)

(6)标注归一

  1. 步骤说明
    • 在原始CAD图纸上标注出不同处,对同一位置多个不同标注进行合并处理,去除多余标注,使标注简洁规范,便于观察和分析。
  2. 代码实现
def annotation_normalization(image, original_image):
    contours, _ = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for contour in of the above is just an example and may need to be adjusted according to the actual situation. You can further optimize the code and parameters according to your own needs.

结果

部署方式

编程语言:Python
主要库:OpenCV(用于图像处理)

 ​​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CSP CCF记录】201712-2第12次认证 游戏

题目 样例输入1 5 2 样例输出1 3 样例输入2 7 3 样例输出2 4 代码 没有技术含量的一道题 #include<bits/stdc.h> using namespace std; int main() {int n,k;int a[1010]{0}; // 标记小朋友是否被淘汰 cin>>n>>k;int i0,num0,mn; while(m!1){i1; if(a[i]!1…

Unity图形学之BRDF双向反射分布函数

1.描述了入射光线在非透明物体表面如何进行反射&#xff0c;也就是说多少光发生了漫反射&#xff0c;多少光发生了镜面反射 BRDF 函数计算的是“特定反射方向的光强与入射光强的比例” 2.各向异性 与 均向性 相反&#xff0c;是指在不同方向具有不同行为的性质&#xff0c;也就…

华为ENSP--BGP路由协议实验详解

项目背景 随着A公司网络规模的增长和新业务对互联网接入速度及稳定性需求的提升&#xff0c;公司决定升级其网络设施。为此&#xff0c;A公司向运营商B租用了两条线路以接入网络&#xff0c;旨在提高网络资源的利用率&#xff0c;并增强网络的安全性、稳定性和可靠性&#xff0…

Springboot项目搭建(5)-前端注册界面

1.创建项目文件 news&#xff1a;为后端IDE文件 news_client&#xff1a;为前端VSCode文件 在 ..\news\news_client 中启用cmd/PowerShell 查看当前 npm 配置的注册表&#xff08;registry&#xff09;地址是否在https://registry.npmmirror.com 如果不在&#xff0c;可在cd…

Centos 7 系统 openGauss 3.1.0 一主两备集群安装部署指南

现供职于某上市互联网公司担任DBA Oracle & PG ACE称号&#xff0c; 拥有 Oracle OCM、AWS、以及部分国产数据库等产品认证。 喜欢技术分享&#xff0c;热爱交友&#xff0c;也热爱健身。 2019年加入墨天轮&#xff0c;目前已发表了一百多篇原创文章&#xff0c;曾多次…

w~视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12538137 #SIF3D 通过两种创新的注意力机制——三元意图感知注意力&#xff08;TIA&#xff09;和场景语义一致性感知注意力&#xff08;SCA&#xff09;——来识别场景中的显著点云&#xff0c;并辅助运动轨迹和姿态的预测…

TypeScript 系统学习 开篇

想学习 TypeScript 的小伙伴看过来&#xff0c;本文将带你一步步学习 TypeScript 入门相关的十四个知识点&#xff0c;详细的内容大纲请看下图&#xff1a; 一、TypeScript 是什么 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集&#xff0c…

计算机网络socket编程(5)_TCP网络编程实现echo_server

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络socket编程(5)_TCP网络编程实现echo_server 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交…

Stable Diffusion 3详解

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

网络安全原理与技术思考题/简答题

作业1&#xff08;第1章、第2章、第8章&#xff09; 1. 网络安全的基本属性有哪些&#xff1f;简单解释每个基本属性的含义。网络安全的扩展属性包括哪些&#xff1f; 基本属性&#xff1a; 1.机密性(Confidentiality)&#xff1a; 含义&#xff1a;确保信息不被未授权的用户…

【大数据学习 | Spark-Core】Spark的分区器(HashPartitioner和RangePartitioner)

之前学过的kv类型上面的算子 groupby groupByKey reduceBykey sortBy sortByKey join[cogroup left inner right] shuffle的 mapValues keys values flatMapValues 普通算子&#xff0c;管道形式的算子 shuffle的过程是因为数据产生了打乱重分&#xff0c;分组、排序、join等…

Java代码实现数字信封

1. 前言 本篇博客是工作经验总结&#xff0c;如果您发现此篇博客有疏漏或有待改进之处&#xff0c;欢迎评论区交流。 2. 数字信封 数字信封使用的是接收者的非对称密钥对。即&#xff1a;用接收者的公钥加密&#xff0c;且只能由接收者的私钥解密。其实现过程如下&#xff1a;…

第 4 章 Java 并发包中原子操作类原理剖析

原子变量操作类 AtomicLong 是原子性递增或者递减类&#xff0c;其内部使用 Unsafe 来实现&#xff0c;AtomicLong类也是在 rt.jar 包下面的&#xff0c;AtomicLong 类就是通过 BootStarp 类加载器进行加载的。这里的原子操作类都使用 CAS 非阻塞算法 private static final lon…

Android调起系统分享图片到其他应用

Android调起系统分享图片到其他应用 有时候分享不想接第三方的&#xff0c;其实如果你的分享要求不是很高&#xff0c;调系统的分享也是可以的。 一、思路&#xff1a; 用intent.action Intent.ACTION_SEND 二、效果图&#xff1a; 三、关键代码&#xff1a; //这个是分享…

C++中虚继承为什么可以解决菱形继承的数据冗余问题

在C中菱形继承会有数据冗余的问题发生&#xff0c;我们可以使用虚继承来解决&#xff0c;那虚继承的原理是什么&#xff0c;为什么它可以解决这个问题。 菱形继承的数据冗余问题 class A { public:int data; };class B : public A {};class C : public A {};class D : public…

LSA详情与特殊区域

LSA是构成LSDB的重要原材料&#xff0c;在OSPF中发挥很大作用。 报文 通用头部 LS age&#xff1a;LSA寿命&#xff0c;0-3600s Options&#xff1a;可选项 LS type&#xff1a;LSA类型&#xff0c;三要素之一 Link State ID&#xff1a;LSAID 三要素之一 Advertising Ro…

Kubeadm 安装 Kubernetes 高可用集群 v1.30.0

1、修改主机名&#xff08;各个节点&#xff09; hostnamectl set-hostname xxx2、hosts 文件加入主机名&#xff08;全部节点&#xff09; cat /etc/hosts 192.168.88.5 master1 192.168.88.6 master2 192.168.88.7 master3 192.168.88.8 node13、关闭防火墙&#xff08;全部…

泥石流灾害风险评估与模拟丨AI与R语言、ArcGIS、HECRAS融合,提升泥石流灾害风险预测的精度和准确性

目录 第一章 理论基础 第二章 泥石流风险评估工具 第三章 数据准备与因子提取 第四章 泥石流灾害评价 第五章 HECRAS软件的应用 第六章 操作注意事项与模型优化 泥石流灾害的频发与严重后果&#xff0c;已成为全球范围内防灾减灾工作的重大挑战。随着科技的不断进步&…

自由学习记录(25)

只要有修改&#xff0c;子表就不用元表的参数了&#xff0c;用自己的参数&#xff08;只不过和元表里的那个同名&#xff09; 子表用__index“继承”了父表的值&#xff0c;此时子表仍然是空表 一定是创建这样一个同名的变量在原本空空的子表里&#xff0c; 传参要传具体的变…

leetcode 3206. 交替组 I 简单

给你一个整数数组 colors &#xff0c;它表示一个由红色和蓝色瓷砖组成的环&#xff0c;第 i 块瓷砖的颜色为 colors[i] &#xff1a; colors[i] 0 表示第 i 块瓷砖的颜色是 红色 。colors[i] 1 表示第 i 块瓷砖的颜色是 蓝色 。 环中连续 3 块瓷砖的颜色如果是 交替 颜色&…