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

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

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda