【人工智能项目】工业钢板焊缝图像去噪处理

2023-10-23 22:59

本文主要是介绍【人工智能项目】工业钢板焊缝图像去噪处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【人工智能项目】工业钢板焊缝图像去噪处理

在这里插入图片描述

最近,论文盲审了~ 工作等谈薪了~。没大有什么事情了,就准备把研究生阶段做过的一些东西分享出来,希望给大家有所帮助。

本次分享的是有关一些高分辨率图像背景较为复杂的图像一些去噪处理方法,我当时处理的图像的分辨率大小是6000x1500分辨率,主要是当时工业背景较为复杂,待检测的缺陷对象与背景的差异不明显,因此需要对背景去噪,缺陷点增强的处理。

在这里插入图片描述

读取图片

首先给出本次处理的原始图片。
在这里插入图片描述
从原图中可以看出缺陷点与背景差异极其不明显,若想送入神经网络中必需要先对其进行预处理工作。

import cv2 
img = cv2.imread("src.tif",1)
#第二个参数是通道数和位深的参数,
#IMREAD_UNCHANGED = -1#不进行转化,比如保存为了16位的图片,读取出来仍然为16位。
#IMREAD_GRAYSCALE = 0#进行转化为灰度图,比如保存为了16位的图片,读取出来为8位,类型为CV_8UC1。
#IMREAD_COLOR = 1#进行转化为RGB三通道图像,图像深度转为8位
#IMREAD_ANYDEPTH = 2#保持图像深度不变,进行转化为灰度图。
#IMREAD_ANYCOLOR = 4#若图像通道数小于等于3,则保持原通道数不变;若通道数大于3则只取取前三个通道。图像深度转为8位
print (img.shape)
print (img.dtype) 
print (img.min())
print (img.max())
#创建窗口并显示图像
# cv2.namedWindow("Image")
# cv2.imshow("Image",img)
# cv2.waitKey(0)
# #释放窗口
# cv2.destroyAllWindows() 

(2072, 6822, 3)
uint8
80
252

图像模糊预处理

通过将图像与低通滤波器内核进行卷积来实现图像模糊。这对于消除噪音很有用。它实际上从图像中消除了高频部分(例如噪声,边缘)。因此,在此操作中边缘有些模糊。(有一些模糊技术也可以不模糊边缘)。OpenCV主要提供四种类型的模糊技术。

import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltplt.imshow(img2),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

# 中位模糊
blur = cv.blur(img2,(5,5))
plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
cv2.imwrite("blur.jpg",blur)

在这里插入图片描述

# 高斯滤波
blur = cv.GaussianBlur(img,(3,3),0)
plt.imshow(blur),plt.title('GaussianBlur')
plt.xticks([]), plt.yticks([])
plt.show()
cv2.imwrite("GaussianBlur.jpg",blur)

在这里插入图片描述

# 双边滤波
blur = cv.bilateralFilter(img,9,75,75)
plt.imshow(blur),plt.title('bilateralFilter')
plt.xticks([]), plt.yticks([])
plt.show()
cv2.imwrite("bilateralFilter.jpg",blur)

在这里插入图片描述

对比度增强

在进行对比度增强之前,先看一下图像的灰度直方图的分布情况。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as pltdef calcGrayHist(I):# 计算灰度直方图h, w = I.shape[:2]grayHist = np.zeros([256], np.uint64)for i in range(h):for j in range(w):grayHist[I[i][j]] += 1return grayHistimg = cv.imread("src.tif")
grayHist = calcGrayHist(img)
x = np.arange(256)
# 绘制灰度直方图
plt.plot(x, grayHist, 'r', linewidth=2, c='black')
plt.xlabel("gray Label")
plt.ylabel("number of pixels")
plt.show()
# cv.imshow("img", img)
# cv.waitKey()

在这里插入图片描述

# 线性变换
# 对图像进行 线性变换
def linear_transform(img, a, b):''':param img: [h, w, 3] 彩色图像:param a:  float  这里需要是浮点数,把图片uint8类型的数据强制转成float64:param b:  float:return: out = a * img + b'''out = a * img + bout[out > 255] = 255out = np.around(out)out = out.astype(np.uint8)return out# a = 2, b=10
img = cv2.imread("src.tif") # 这里需要指定一个 img_path
img = linear_transform(img, 1, 10)
img =  cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img)cv2.imwrite("linear.jpg",img)

在这里插入图片描述

# 直方图正规化img = cv.imread("src.tif", 0)
# 计算原图中出现的最小灰度级和最大灰度级
# 使用函数计算
Imin, Imax = cv.minMaxLoc(img)[:2]
# 使用numpy计算
# Imax = np.max(img)
# Imin = np.min(img)
Omin, Omax = 0, 255
# 计算a和b的值
a = float(Omax - Omin) / (Imax - Imin)
b = Omin - a * Imin
out = a * img + b
out = out.astype(np.uint8)
# cv.imshow("img", img)
# plt.imshow("out",out)
# cv.imshow("out", out)
# cv.waitKey()
cv2.imwrite("normalize.jpg",out)
# 伽马变换
img = cv.imread("src.tif", 0)
# 图像归一化
fi = img / 255.0
# 伽马变换
gamma = 0.4
out = np.power(fi, gamma)
cv2.imwrite("gamma.jpg",out)
# 直方图均衡化
# 对图像进行 均衡化
def equalize_transfrom(gray_img):return cv.equalizeHist(gray_img)img = cv2.imread("GaussianBlur.jpg") # 这里需要指定一个 img_path
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
b_out = equalize_transfrom(b)
g_out = equalize_transfrom(g)
r_out = equalize_transfrom(r)
equa_out = np.stack((b_out, g_out, r_out), axis=-1)
img =  cv2.cvtColor(equa_out,cv2.COLOR_BGR2RGB)
plt.imshow(img)# 保存图片
cv2.imwrite("equalize.jpg",img)

在这里插入图片描述

# 高斯滤波
blur = cv.GaussianBlur(img,(3,3),0)
plt.imshow(blur),plt.title('GaussianBlur')
plt.xticks([]), plt.yticks([])
plt.show()
cv2.imwrite("GaussianBlur.jpg",blur)

在这里插入图片描述

# 全局直方图均衡化
import mathdef equalHist(img):# 灰度图像矩阵的高、宽h, w,_ = img.shape# 第一步:计算灰度直方图grayHist = calcGrayHist(img)# 第二步:计算累加灰度直方图zeroCumuMoment = np.zeros([256], np.uint32)for p in range(256):if p == 0:zeroCumuMoment[p] = grayHist[0]else:zeroCumuMoment[p] = zeroCumuMoment[p - 1] + grayHist[p]# 第三步:根据累加灰度直方图得到输入灰度级和输出灰度级之间的映射关系outPut_q = np.zeros([256], np.uint8)cofficient = 256.0 / (h * w)for p in range(256):q = cofficient * float(zeroCumuMoment[p]) - 1if q >= 0:outPut_q[p] = math.floor(q)else:outPut_q[p] = 0# 第四步:得到直方图均衡化后的图像equalHistImage = np.zeros(img.shape, np.uint8)for i in range(h):for j in range(w):equalHistImage[i][j] = outPut_q[img[i][j]]return equalHistImageimg = cv.imread("src.tif", 0)
# 使用自己写的函数实现
equa = equalHist(blur)
cv2.imwrite("equalize2.jpg",equa)
# 自动色彩均衡
img = cv2.imread("equalize.jpg",1) # 这里需要指定一个 img_path
b, g, r = cv2.split(img)
B = np.mean(b)
G = np.mean(g)
R = np.mean(r)
K = (R + G + B) / 3
Kb = K / B
Kg = K / G
Kr = K / R
cv2.addWeighted(b, Kb, 0, 0, 0, b)
cv2.addWeighted(g, Kg, 0, 0, 0, g)
cv2.addWeighted(r, Kr, 0, 0, 0, r)
merged = cv2.merge([b,g,r])
plt.imshow(merged)
cv.imwrite('merged.jpg',merged)

在这里插入图片描述

# 自适应直方图均衡
import numpy as np
import cv2 as cv
img = cv2.imread("merged.jpg",0) # 这里需要指定一个 img_path
# create a CLAHE object (Arguments are optional).
clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)
plt.imshow(cl1)
cv.imwrite('clahe_2.jpg',cl1)

在这里插入图片描述

这篇关于【人工智能项目】工业钢板焊缝图像去噪处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/271007

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

2. 下载rknn-toolkit2项目

官网链接: https://github.com/airockchip/rknn-toolkit2 安装好git:[[1. Git的安装]] 下载项目: git clone https://github.com/airockchip/rknn-toolkit2.git 或者直接去github下载压缩文件,解压即可。