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

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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum