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

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

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



赶紧关注我们吧


相关文章
|
2月前
|
机器学习/深度学习 编解码 自动驾驶
计算机视觉之图像到图像的翻译
图像到图像的翻译(Image-to-Image Translation)是指将一种图像从一种表示转换为另一种表示的过程。该任务的目标是在保证图像语义信息的前提下,将图像风格、颜色或其他视觉特征进行转换。该技术在计算机视觉领域具有广泛应用,例如图像风格迁移、图像修复、图像增强、超分辨率、语义分割等。
35 4
|
6月前
|
编解码 边缘计算 自然语言处理
2024年5月计算机视觉论文推荐:包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题
五月发布的计算机视觉领域重要论文涵盖了扩散模型、视觉语言模型、图像生成与编辑及目标检测。亮点包括:1) Dual3D提出双模式推理策略,实现高效文本到3D图像生成;2) CAT3D利用多视图扩散模型创建3D场景,仅需少量图像;3) Hunyuan-DiT是多分辨率的中文理解扩散Transformer,可用于多模态对话和图像生成;4) 通过潜在扩散模型从EEG数据重建自然主义音乐,展示复杂音频重建潜力。此外,还有关于视觉语言模型和图像编辑的创新工作,如BlobGEN用于合成具有控制性的图像。
202 3
|
4月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
5月前
|
算法 计算机视觉 Python
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
|
6月前
|
机器学习/深度学习 自动驾驶 算法
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
【计算机视觉+自动驾驶】二、多任务深度学习网络并联式、级联式构建详细讲解(图像解释 超详细必看)
268 1
|
6月前
|
机器学习/深度学习 计算机视觉 Python
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
187 0
|
算法 vr&ar 计算机视觉
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
[笔记]Python计算机视觉编程《二》 基本的图像操作和处理
|
6月前
|
机器学习/深度学习 计算机视觉
AIGC核心技术——计算机视觉(CV)预训练大模型
【1月更文挑战第13天】AIGC核心技术——计算机视觉(CV)预训练大模型
588 3
AIGC核心技术——计算机视觉(CV)预训练大模型
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
119 0
|
2月前
|
人工智能 测试技术 API
AI计算机视觉笔记二十 九:yolov10竹签模型,自动数竹签
本文介绍了如何在AutoDL平台上搭建YOLOv10环境并进行竹签检测与计数。首先从官网下载YOLOv10源码并创建虚拟环境,安装依赖库。接着通过官方模型测试环境是否正常工作。然后下载自定义数据集并配置`mycoco128.yaml`文件,使用`yolo detect train`命令或Python代码进行训练。最后,通过命令行或API调用测试训练结果,并展示竹签计数功能。如需转载,请注明原文出处。

热门文章

最新文章