【动手学计算机视觉】第四讲:图像预处理之图像增广(上)

简介: 近几年深度学习的大规模成功应用主要的就是得益于数据的累积和算例的提升,虽然近几年很多研究者竭力的攻克半监督和无监督学习,减少对大量数据的依赖,但是目前数据在计算机视觉、自然语言处理等人工智能技术领域依然占据着非常重要的地位。甚至可以说,大规模的数据是计算机视觉成功应用的前提条件。但是由于种种原因导致数据的采集变的十分困难,因此图像增广技术就在数据的准备过程中占据着举足轻重的角色,本文就概括一下常用的图像增广技术并编程实现相应手段。

01

介绍

图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。

目前常用的图像增广技术有如下几种:

  • 镜像变换
  • 旋转
  • 缩放
  • 裁剪
  • 平移
  • 亮度修改
  • 添加噪声
  • 剪切
  • 变换颜色

在图像增广过程中可以使用其中一种手段进行扩充,也可以使用其中的几种方法进行组合使用,由于概念比较简单,容易理解,所以接下来就边实现,边详细阐述理论知识。

02

几何变换

首先以水平镜像为例,假设在原图中像素的坐标为

69.png,在镜像变换之后的图像中的坐标为72.png,原图像坐标和镜像变换后的坐标之间的关系式:

73.png

其w为图像的宽度。

那么两张图像的关系就是:

74.png

它的逆变换就是

75.png

从原图到水平镜像的变换矩阵就是:


76.png

同理,可知,垂直镜像变换的关系式为:

77.png

其h为图像高度。

通过上述可以知道,平移变换的数学矩阵为:

78.png

其d_x、d_y分别是像素在水平和垂直方向移动的距离。

同理可以推广到旋转变换上,加上原像素的坐标为79.png,该像素点相对于原点的角度alpha,假设有一个半径r的圆,那么原像素的坐标可以表示为:


80.png


加上旋转后的像素坐标为81.png,旋转角度theta,那么可以表示为:

82.png

通过展开、化简可得,

83.png

把上述公式写成数学矩阵形式为:

84.png

因此旋转变换的矩阵为:

85.png

其他的几何变换方式和上述提到的核心思想大同小异,因此,就不再详细展开,感兴趣的可以在网上搜集一下,或者看一下数字图像处理相关的书籍,关注这些内容的讲解有很多。


03

编程实践

编程实践过程中主要用到opencv、numpy和skimage。

读取图像:

1# 1. 读取图像
2img = cv2.imread("./data/000023.jpg")
3cv2.imshow("Origin", img)
4cv2.waitKey()

86.jpg

初始化一个矩阵,用于存储转化后的图像,

generate_img = np.zeros(img.shape)

1.水平镜像

遍历图像的像素,用前文提到的数学关系式进行像素的转化,

for i in range(h):
for j in range(w):
     generate_img[i, w - 1 - j] = img[i, j]
cv2.imshow("Ver", generate_img.astype(np.uint8))
cv2.waitKey()

备注:初始化的图像数据类型是numpy.float64,用opencv显示时无法正常显示,因此在显示时需要用astype(np.uint8)把图像转化成numpy.uint8数据格式。

相关文章
|
5天前
|
机器学习/深度学习 自动驾驶 算法
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
93 1
|
7月前
|
算法 vr&ar 计算机视觉
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
|
7月前
|
存储 算法 程序员
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(四)
|
7月前
|
存储 Serverless C语言
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
|
7月前
|
安全 数据挖掘 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(二)
|
7月前
|
XML 算法 计算机视觉
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(一)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理
|
9月前
|
机器学习/深度学习 编解码 决策智能
计算机视觉实战(七)图像金字塔与轮廓检测
计算机视觉实战(七)图像金字塔与轮廓检测
计算机视觉实战(七)图像金字塔与轮廓检测
|
5天前
|
机器学习/深度学习 计算机视觉
AIGC核心技术——计算机视觉(CV)预训练大模型
【1月更文挑战第13天】AIGC核心技术——计算机视觉(CV)预训练大模型
401 3
AIGC核心技术——计算机视觉(CV)预训练大模型
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
71 0
|
5天前
|
机器学习/深度学习 编解码 人工智能
Vision Mamba:将Mamba应用于计算机视觉任务的新模型
Mamba是LLM的一种新架构,与Transformers等传统模型相比,它能够更有效地处理长序列。就像VIT一样现在已经有人将他应用到了计算机视觉领域,让我们来看看最近的这篇论文“Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Models,”
291 7

热门文章

最新文章