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

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

2.垂直镜像

垂直镜像变换代码,

1for i in range(h):
2    for j in range(w):
3        generate_img[h-1-i, j] = img[i, j]

87.jpg


镜像变换也可以直接调用opencv的flip进行使用。

3.图像缩放

这个比较简单,直接调用opencv的resize函数即可,

output = cv2.resize(img, (100, 300))

90.jpg


4.旋转变换

这个相对复杂一些,需要首先用getRotationMatrix2D函数获取一个旋转矩阵,然后调用opencv的warpAffine仿射函数安装旋转矩阵对图像进行旋转变换,

center = cv2.getRotationMatrix2D((w/2, h/2), 45, 1)
rotated_img = cv2.warpAffine(img, center, (w, h))

5. 平移变换

首先用numpy生成一个平移矩阵,然后用仿射变换函数对图像进行平移变换,

move = np.float32([[1, 0, 100], [0, 1, 100]])
move_img = cv2.warpAffine(img, move, (w, h))

6.亮度变换

亮度变换的方法有很多种,本文介绍一种叠加图像的方式,通过给原图像叠加一副同样大小,不同透明度的全零像素图像来修改图像的亮度,

alpha = 1.5
light = cv2.addWeighted(img, alpha, np.zeros(img.shape).astype(np.uint8), 1-alpha, 3)

其中alpha是原图像的透明度,

7.添加噪声

首先写一下噪声添加的函数,原理就是给图像添加一些符合正态分布的随机数,

def add_noise(img):
   img = np.multiply(img, 1. / 255,
                       dtype=np.float64)
   mean, var = 0, 0.01
    noise = np.random.normal(mean, var ** 0.5,
                             img.shape)
    img = convert(img, np.floating)
     out = img + noise
    return out

8.组合变换

除了以上方法单独使用之外,还可以叠加其中多种方法进行组合使用,比如可以结合选择、镜像进行使用,


完整代码如下:

1import cv2
 2import numpy as np
 3from skimage.util.dtype import convert
 4
 5
 6class ImageAugmented(object):
 7    def __init__(self, path="./data/000023.jpg"):
 8        self.img = cv2.imread(path)
 9        self.h, self.w = self.img.shape[0], self.img.shape[1]
10
11    # 1. 镜像变换
12    def flip(self, flag="h"):
13        generate_img = np.zeros(self.img.shape)
14        if flag == "h":
15            for i in range(self.h):
16                for j in range(self.w):
17                    generate_img[i, self.h - 1 - j] = self.img[i, j]
18        else:
19            for i in range(self.h):
20                for j in range(self.w):
21                    generate_img[self.h-1-i, j] = self.img[i, j]
22        return generate_img
23
24    # 2. 缩放
25    def _resize_img(self, shape=(100, 300)):
26        return cv2.resize(self.img, shape)
27
28    # 3. 旋转
29    def rotated(self):
30        center = cv2.getRotationMatrix2D((self.w / 2, self.h / 2), 45,1)
31        return cv2.warpAffine(self.img, center, (self.w, self.h))
32
33    # 4. 平移
34    def translation(self, x_scale=100, y_scale=100):
35        move = np.float32([[1, 0, x_scale], [0, 1, y_scale]])
36        return cv2.warpAffine(self.img, move, (self.w, self.h))
37
38    # 5. 改变亮度
39    def change_light(self, alpha=1.5, scale=3):
40        return cv2.addWeighted(self.img, alpha, np.zeros(self.img.shape).astype(np.uint8), 1-alpha, scale)
41
42    # 6. 添加噪声
43    def add_noise(self, mean=0, var=0.01):
44        img = np.multiply(self.img, 1. / 255, dtype=np.float64)
45        noise = np.random.normal(mean, var ** 0.5,
46                                 img.shape)
47        img = convert(img, np.floating)
48        out = img + noise
49        return out



赶紧关注我们吧


相关文章
|
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

热门文章

最新文章