【动手学计算机视觉】第一讲:图像预处理之图像去噪

简介: 很多人想入门AI,可是AI包含很多方向,我建议首先应该明确的选择一个方向,然后有目标、有针对的去学习。计算机视觉作为目前AI领域研究较多、商业应用较为成功的一个方向,这几年也是非常火热,无论是学术界还是企业界,学术界有CVPR、ICCV、ECCV等顶刊,企业界对计算机视觉领域的人口需求也非常的大,因此,我从计算机视觉这个方向开始着手AI教程。

介绍

最近几年计算机视觉非常火,也出现了很多成熟的卷积神经网络模型,比如R-CNN系列、SSD、YOLO系列,而且,这些模型在github上也有很多不错的开源代码,所以,很多入门计算机视觉的人会早早的克隆下开源代码、利用tensorflow或pytorch搭建计算机视觉平台进行调试。

我个人不推崇这种方式,我更推崇对图像底层的技术有一些了解,比如图像去噪、图像分割等技术,这有几点好处:

  • 对图像内部的结构有更清晰的认识
  • 这些技术可以用于计算机视觉预处理或后处理,能够有助于提高计算机视觉模型精度

第一讲,我从图像去噪开始说起,图像去噪是指减少图像中造成的过程。现实中的图像会受到各种因素的影响而含有一定的噪声,噪声主要有以下几类:

  • 椒盐噪声
  • 加性噪声
  • 乘性噪声
  • 高斯噪声

图像去噪的方法有很多种,其中均值滤波、中值滤波等比较基础且成熟,还有一些基于数学中偏微分方程的去噪方法,此外,还有基于频域的小波去噪方法。均值滤波、中值滤波这些基础的去噪算法以其快速、稳定等特性,在项目中非常受欢迎,在很多成熟的软件或者工具包中也集成了这些算法,下面,我们就来一步一步实现以下。

编程实践


1完整代码地址:
2https://github.com/jakpopc/aiLearnNotes/blob/master/computer_vision/image_denoising.py
3requirement:scikit-image/opencv/numpy

首先读取图像,图像来自于voc2007:

1img = cv2.imread("../data/2007_001458.jpg")
2cv2.imshow("origin_img", img)
3cv2.waitKey()


15.jpg


生成噪声图像,就是在原来图像上加上一些分布不规律的像素值,可以自己用随机数去制造噪声,在这里,就用Python第三方库scikit-image的random_noise添加噪声:

方法1:

1noise_img = skimage.util.random_noise(img, mode="gaussian")
2# mode是可选参数:分别有'gaussian'、'localvar'、'salt'、'pepper'、's&p'、'speckle',可以选择添加不同的噪声类型。

方法2:

也可以自己生成噪声,与原图像进行加和得到噪声图像:

1def dd_noise(img):
2    img = np.multiply(img, 1. / 255,
3                        dtype=np.float64)
4    mean, var = 0, 0.01
5    noise = np.random.normal(mean, var ** 0.5,
6                             img.shape)
7    img = convert(img, np.floating)
8    out = img + noise
9    return out


19.jpg

最后是图像去噪,图像去噪的算法有很多,有基于偏微分热传导方程的,也有基于滤波的,其中基于滤波的以其速度快、算法成熟,在很多工具包中都有实现,所以使用也就较多,常用的滤波去噪算法有以下几种:

  • 中值滤波
  • 均值滤波
  • 高斯滤波

滤波的思想和这两年在计算机视觉中用的较多的卷积思想类似,都涉及窗口运算,只是卷积是用一个卷积核和图像中对应位置做卷积运算,而滤波是在窗口内做相应的操作,

20.png

以均值滤波为例,

对图像中每个像素的像素值进行重新计算,假设窗口大小ksize=3,图像中棕色的"5"对应的像素实在3*3的邻域窗口内进行计算,对于均值滤波就是求3*3窗口内所有像素点的平均值,也就是

21.png

同理,对于中值滤波就是把窗口内像素按像素值大小排序求中间值,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到,

下面开始编写去噪部分的代码:

方法1:

可以使用opencv这一类工具进行去噪:

1# 中值滤波
2denoise = cv2.medianBlur(img, ksize=3)
3# 均值滤波
4denoise = cv2.fastNlMeansDenoising(img, ksize=3)
5# 高斯滤波
6denoise = cv2.GaussianBlur(img, ksize=3)

方法2:

编程一步一步实现图像去噪,首先是计算窗口邻域内的值,这里以计算中值为例:

1def compute_pixel_value(img, i, j, ksize, channel):
2    h_begin = max(0, i - ksize // 2)
3    h_end = min(img.shape[0], i + ksize // 2)
4    w_begin = max(0, j - ksize // 2)
5    w_end = min(img.shape[1], j + ksize // 2)
6    return np.median(img[h_begin:h_end, w_begin:w_end, channel])

然后是去噪部分,对每个像素使用compute_pixel_value函数计算新像素的值:

1def denoise(img, ksize):
2    output = np.zeros(img.shape)
3    for i in range(img.shape[0]):
4        for j in range(img.shape[1]):
5            output[i, j, 0] = compute_pixel_value(img, i, j, ksize, 0)
6            output[i, j, 1] = compute_pixel_value(img, i, j, ksize, 1)
7            output[i, j, 2] = compute_pixel_value(img, i, j, ksize, 2)
8    return output


22.jpg



相关文章
|
4月前
|
机器学习/深度学习 编解码 自动驾驶
计算机视觉之图像到图像的翻译
图像到图像的翻译(Image-to-Image Translation)是指将一种图像从一种表示转换为另一种表示的过程。该任务的目标是在保证图像语义信息的前提下,将图像风格、颜色或其他视觉特征进行转换。该技术在计算机视觉领域具有广泛应用,例如图像风格迁移、图像修复、图像增强、超分辨率、语义分割等。
93 4
|
8月前
|
编解码 边缘计算 自然语言处理
2024年5月计算机视觉论文推荐:包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题
五月发布的计算机视觉领域重要论文涵盖了扩散模型、视觉语言模型、图像生成与编辑及目标检测。亮点包括:1) Dual3D提出双模式推理策略,实现高效文本到3D图像生成;2) CAT3D利用多视图扩散模型创建3D场景,仅需少量图像;3) Hunyuan-DiT是多分辨率的中文理解扩散Transformer,可用于多模态对话和图像生成;4) 通过潜在扩散模型从EEG数据重建自然主义音乐,展示复杂音频重建潜力。此外,还有关于视觉语言模型和图像编辑的创新工作,如BlobGEN用于合成具有控制性的图像。
295 3
|
6月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
7月前
|
算法 计算机视觉 Python
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
|
8月前
|
机器学习/深度学习 自动驾驶 算法
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
341 1
|
8月前
|
机器学习/深度学习 计算机视觉 Python
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
222 0
|
算法 vr&ar 计算机视觉
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
|
存储 算法 程序员
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
139 0
|
存储 Serverless C语言
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
|
安全 数据挖掘 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)

热门文章

最新文章