【Computer Vision】图像数据预处理详解

这篇具有很好参考价值的文章主要介绍了【Computer Vision】图像数据预处理详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Computer Vision】图像数据预处理详解


【Computer Vision】图像数据预处理详解

活动地址:[CSDN21天学习挑战赛](https://marketing.csdn.net/p/bdabfb52c5d56532133df2adc1a728fd)


作者简介:在校大学生一枚,华为云享专家,阿里云星级博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~
.
博客主页ぃ灵彧が的学习日志
.
本文专栏人工智能
.
专栏寄语:若你决定灿烂,山无遮,海无拦
.
【Computer Vision】图像数据预处理详解


前言

什么是计算机视觉?

计算机视觉(Computer Vision)又称为机器视觉(Machine Vision),顾名思义就是要让计算机能够去“看”人类眼中的世界并进行理解和描述。

什么是图像分类?

图像分类是计算机视觉中为图像分配一个标签,其核心是向计算机输入一张图像,计算机能够从给定的分类集合中为图像分配一个标签。这里的标签来自预定义的可能类别集,例如,我们预定义类别集合categories={‘猫’,‘狗’,‘其他’},然后我们输入一张图片,计算机给出这副图片的类别标签‘猫’,或者给出这幅图片属于每个类别标签的概率{‘猫’:0.9,‘狗’:0.04,‘其他’:0.06},这样就完成了一个图像分类任务。


一、单通道、多通道图像读取

  1. 单通道图:

俗称灰度图,每个像素点只能有有一个值表示颜色,它的像素值在0到255之间,0是黑色,255是白色,中间值是一些不同等级的灰色,如下图1所示:

【Computer Vision】图像数据预处理详解

  1. 三通道图

每个像素点都有3个值表示 ,所以就是3通道。也有4通道的图。如下图2所示,例如RGB图片即为三通道图片,RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

【Computer Vision】图像数据预处理详解

(一)、单通道图像

  1. 引入依赖包
%matplotlib inline
import numpy as np
import cv2
import matplotlib.pyplot as plt
import paddle
from PIL import Image
  1. 读取单通道图像
img = Image.open('lena-gray.jpg')
  1. 展示图片
display(img)
print(img)
print(img.size)

运行结果如图3所示:

【Computer Vision】图像数据预处理详解


(二)、图像大小与像素值输出

  1. 将图片转为矩阵表示
# 将图片转为矩阵表示
img_np = np.array(img)
print("图像尺寸:", img_np.shape)
print("图像矩阵:\n", img_np)

  1. 将矩阵保存成文本,数字格式为整数
# 将矩阵保存成文本,数字格式为整数
# np.savetxt('lena_gray.txt', np.array(img), fmt='%4d')
np.savetxt('lena_gray.txt', img, fmt='%4d')
  1. 三通道图像

多通道读取方式与单通道一样,直接用Image.open()打开即可。

  1. 读取彩色图像
img = Image.open('lena.jpg')
# 将图片转为矩阵表示
img_np = np.array(img)
print("图像尺寸:", img_np.shape)
print("图像矩阵:\n", img_np)

运行结果如下图4、5所示:

【Computer Vision】图像数据预处理详解
【Computer Vision】图像数据预处理详解


(三)、三通道图像读取

  1. 读取彩色图像
# 使用PIL分离颜色通道
r,g,b = img.split()

2.获取r通道转的灰度图

# 获取r通道转的灰度图
print(r,'\n',g,'\n',b)
print(type(r))

输出结果如下图6所示:

【Computer Vision】图像数据预处理详解

  1. 展示各通道图像
# 获取第一个通道转的灰度图
r = img.getchannel(0)
# 获取第二个通道转的灰度图
display(img.getchannel(1))
# 获取b通道转的灰度图
b
# 获取第二个通道转的灰度图
display(img.getchannel(2))
# 将矩阵保存成文本,数字格式为整数
np.savetxt('lena-r.txt', r, fmt='%4d')
np.savetxt('lena-g.txt', g, fmt='%4d')
np.savetxt('lena-b.txt', b, fmt='%4d')

获取到的R、G、B三个通道的图像展示如图7、8、9所示:

【Computer Vision】图像数据预处理详解
【Computer Vision】图像数据预处理详解

【Computer Vision】图像数据预处理详解


(四)、使用cv2.split()分离颜色通道

# 引入依赖包
%matplotlib inline
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('lena.jpg')

# 通道分割
b, g, r = cv2.split(img)

# 通道合并
RGB_Image=cv2.merge([b,g,r])
RGB_Image = cv2.cvtColor(RGB_Image, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(12,12))
#显示各通道信息
plt.subplot(141)
plt.imshow(RGB_Image,'gray')
plt.title('RGB_Image')
plt.subplot(142)
plt.imshow(r,'gray')
plt.title('R_Channel')
plt.subplot(143)
plt.imshow(g,'gray')
plt.title('G_Channel')
plt.subplot(144)
plt.imshow(b,'gray')
plt.title('B_Channel')

输出结果如图10所示:

【Computer Vision】图像数据预处理详解


二、图像的通道转换

(一)、颜色空间转换

最常用的颜色空间转换如下:

RGB或BGR到灰度(COLOR_RGB2GRAY,COLOR_BGR2GRAY)
RGB或BGR到YcrCb(或YCC)(COLOR_RGB2YCrCb,COLOR_BGR2YCrCb)
RGB或BGR到HSV(COLOR_RGB2HSV,COLOR_BGR2HSV)
RGB或BGR到Luv(COLOR_RGB2Luv,COLOR_BGR2Luv)
灰度到RGB或BGR(COLOR_GRAY2RGB,COLOR_GRAY2BGR)

颜色转换其实是数学运算,如灰度化最常用的是:gray=R0.299+G0.587+B*0.114。


  1. BGR图像转换为灰度图像
img = cv2.imread('lena.jpg')
# 转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 保存灰度图
cv2.imwrite('img_gray.jpg', img_gray)
  1. GBR图像转换为RGB图像
# 加载彩色图
img = cv2.imread('lena.jpg', 1)
# 将彩色图的BGR通道顺序转成RGB
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 显示图片
plt.imshow(img)
#打印图片形状
print(img.shape)

输出结果如下图11所示:

【Computer Vision】图像数据预处理详解


(二)、图片属性

  1. 打印图片形状:
# 打印图片的形状
print(img.shape)
# 形状中包括行数、列数和通道数
height, width, channels = img.shape
print('图片高度:{},宽度:{},通道数:{}'.format(height,width,channels))

输出结果如下图12所示:

【Computer Vision】图像数据预处理详解

  1. BGR转RGB
# 加载灰度图
img = cv2.imread('lena.jpg',1)
# plt.imshow(img)

# 将彩色图的BGR通道顺序转成RGB
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

输出结果如下图13所示:

【Computer Vision】图像数据预处理详解

  1. 加载彩色图
# 加载彩色图
img = cv2.imread('lena.jpg', 1)
# 将彩色图的BGR通道直接转为灰度图
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.imshow(img,'gray')
img.shape

输出结果如下图14所示:

【Computer Vision】图像数据预处理详解


三、图像拼接与缩放

图像拼接,顾名思义就是将两张图片拼接在一起成为一张图像。本部分先将一张图片从中间切割成两张图片,然后再进行拼接。


(一)、图像分割

%matplotlib inline
import numpy as np
import cv2
import matplotlib.pyplot as plt
 
path3 = 'test.jpg'
 
img3 = cv2.imread(path3)

# the image height
sum_rows = img3.shape[0]
print(img3.shape)
# print(sum_rows)
# the image length
sum_cols = img3.shape[1]
# print(sum_cols)
part1 = img3[0:sum_rows, 0:int(sum_cols/2)]
print(part1.shape)
part2 = img3[0:sum_rows, int(sum_cols/2):sum_cols]
print(part2.shape)

plt.figure(figsize=(12,12))
#显示各通道信息
plt.subplot(121)
plt.imshow(part1)
plt.title('Image1')
plt.subplot(122)
plt.imshow(part2)
plt.title('Image2')


分隔后形成的图片如下图15所示:

【Computer Vision】图像数据预处理详解


(二)、图像拼接


img1 = part1
img2 = part2

# new image
final_matrix = np.zeros((254, 510, 3), np.uint8)
# change 
final_matrix[0:254, 0:255] = img1
final_matrix[0:254, 255:510] = img2
 
plt.subplot(111)
plt.imshow(final_matrix)
plt.title('final_img')

拼接后的图像展示如图16所示:

【Computer Vision】图像数据预处理详解


(三)、图像几何变换

实现旋转、平移和缩放图片
OpenCV函数:cv2.resize(), cv2.flip(), cv2.warpAffine()
缩放图片

缩放就是调整图片的大小,使用cv2.resize()函数实现缩放。可以按照比例缩放,也可以按照指定的大小缩放: 我们也可以指定缩放方法interpolation,更专业点叫插值方法,默认是INTER_LINEAR,全部可以参考:InterpolationFlags

缩放过程中有五种插值方式:

cv2.INTER_NEAREST 最近邻插值
cv2.INTER_LINEAR 线性插值
cv2.INTER_AREA 基于局部像素的重采样,区域插值
cv2.INTER_CUBIC 基于邻域4x4像素的三次插值
cv2.INTER_LANCZOS4 基于8x8像素邻域的Lanczos插值


  1. 转换为RGB格式
img = cv2.imread('cat.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
print(img.shape)
# 按照指定的宽度、高度缩放图片
res = cv2.resize(img, (400, 500))
plt.imshow(res)
 

输出结果如下图17所示:

【Computer Vision】图像数据预处理详解

  1. 图像缩放
# 按照比例缩放,如x,y轴均放大一倍
res2 = cv2.resize(img, None, fx=5, fy=2, interpolation=cv2.INTER_LINEAR)
plt.imshow(res2)

缩放后效果如图18所示:

【Computer Vision】图像数据预处理详解


四、图像二值化处理

  • 使用固定阈值、自适应阈值和Otsu阈值法"二值化"图像
  • OpenCV函数:cv2.threshold(), cv2.adaptiveThreshold()

阈值分割


固定阈值分割很直接,一句话说就是像素点值大于阈值变成一类值,小于阈值变成另一类值。

cv2.threshold()用来实现阈值分割,ret是return value缩写,代表当前的阈值。函数有4个参数:

  • 参数1:要处理的原图,一般是灰度图
  • 参数2:设定的阈值
  • 参数3:最大阈值,一般为255
  • 参数4:阈值的方式,主要有5种,详情:ThresholdTypes
    • 0: THRESH_BINARY 当前点值大于阈值时,取Maxval,也就是第四个参数,否则设置为0
    • 1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval
    • 2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变
    • 3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0
    • 4:THRESH_TOZERO_INV 当前点值大于阈值时,设置为0,否则不改变

参考资料:基于opencv的固定阈值分割_自适应阈值分割

import cv2

# 灰度图读入
img = cv2.imread('lena.jpg', 0)
# 颜色通道转换
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
ret, th = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 阈值分割

plt.imshow(th)

输出结果如图19所示:

【Computer Vision】图像数据预处理详解


五、图像归一化处理

数据的标准化是指将数据按照比例缩放,使之落入一个特定的区间。将数据通过去均值,实现中心化。处理后的数据呈正态分布,即均值为零。

首先明确两个知识点:

  • 知识点 01:均值(mean,average)

【解释】

  1. 代表一组数据在分布上的集中趋势和总体上的平均水平;
  2. 常说的中心化(Zero-Centered)或者零均值化(Mean-Subtraction),就是把每个数据都
    减去均值;

【公式】

【Computer Vision】图像数据预处理详解

  • 知识点 02:标准差(Standard Deviation)

【解释】

  1. 代表一组数据在分布上的离散程度;
  2. 方差是标准差的平方

【公式】

【Computer Vision】图像数据预处理详解

import numpy as np
from PIL import Image
from paddle.vision.transforms import functional as F


img = np.asarray(Image.open('lena.jpg'))

mean = [0.31169346, 0.25506335, 0.12432463]   
std = [0.34042713, 0.29819837, 0.1375536]
normalized_img = F.normalize(img, mean, std, data_format='HWC')

normalized_img = Image.fromarray(np.uint8(normalized_img))
plt.imshow(normalized_img)

输出结果如下图20所示:
【Computer Vision】图像数据预处理详解


总结

本系列文章内容为根据清华社出版的《机器学习实践》所作的相关笔记和感悟,其中代码均为基于百度飞桨开发,若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

最后,引用本次活动的一句话,来作为文章的结语~( ̄▽ ̄~)~:

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。

ps:更多精彩内容还请进入本文专栏人工智能,进行查看,欢迎大家支持与指教啊~( ̄▽ ̄~)~

【Computer Vision】图像数据预处理详解文章来源地址https://www.toymoban.com/news/detail-456611.html

到了这里,关于【Computer Vision】图像数据预处理详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【3D 图像分割】基于 Pytorch 的 3D 图像分割6(数据预处理之LIDC-IDRI 标签 xml 标签转储及标记次数统计 )

    由于之前哔站作者整理的 LUNA16 数据处理方式过于的繁琐,于是,本文就对 LUNA16 数据做一个新的整理,最终得到的数据和形式是差不多的。但是,主要不同的是代码逻辑比较的简单,便于理解。 对于 LUNA16 数据集的学习,可以去参考这里:【3D 图像分类】基于 Pytorch 的 3D 立

    2024年02月04日
    浏览(40)
  • 图像预处理方法

    两个基本的形态学操作是腐 和膨胀。他们 的变体构成了开运算 ,闭运算, 梯度等。 根据卷积核的大小前景的所有像素会腐 掉 变为 0 ,所以前景物体会变小整幅图像的白色区域会减少。 对于去除白噪声很有用 也可以用来断开两个 在一块的物体等。 函数原型: ⚫src: 输入原

    2023年04月11日
    浏览(30)
  • 图像预处理技术与算法

    图像预处理是计算机视觉和图像处理中非常关键的第一步,其目的是为了提高后续算法对原始图像的识别、分析和理解能力。以下是一些主要的图像预处理技术: 1.图像增强: 对比度调整:通过直方图均衡化(Histogram Equalization)等方法改善图像整体或局部的对比度。 伽玛校

    2024年02月20日
    浏览(38)
  • 【第十七届智能车】智能车图像处理(1)-图像预处理

    本博客使用的硬件是逐飞总钻风130°无畸变摄像头,采用的图像分辨率为188*120,主控为CH32V307VCT6,使用DVI接口进行连接。 我们在本次比赛中采用的是头尾车总钻风摄像头+中间车线性CCD的方案。这两个感光部件各有优劣,使用方式和图像处理也大相径庭。这里讨论的是总钻风

    2024年02月08日
    浏览(39)
  • 使用 SKimage 的图像预处理

    介绍 图像是视觉对象的二维表示,例如照片、绘画或素描。在数字成像中,图像存储为像素值数组,其中每个像素代表图像亮度和颜色的样本。每个像素的颜色可以由一个或多个通道表示,如传统彩色图像中的红色、绿色和蓝色 (RGB) 通道。在本文中,你将学习各种图像预处

    2024年02月03日
    浏览(39)
  • 关于图像分割的预处理 transform

    目录 1. 介绍 2. 关于分割中的 resize 问题 3. 分割的 transform 3.1 随机缩放 RandomResize 3.2 随机水平翻转 RandomHorizontalFlip 3.3 随机竖直翻转 RandomVerticalFlip 3.4 随机裁剪 RandomCrop 3.5 ToTensor 3.6 normalization 3.7 Compose 3.8 中心裁剪 3.9 Resize 缩放 4. 预处理结果可视化 图像分割的预处理不像

    2024年02月04日
    浏览(37)
  • 图像预处理 Tricks【1】:Contours

    轮廓可以简单地理解为连接所有连续点(沿物体边界)的曲线,这些点通常具有相同的颜色或强度。 轮廓在图像分析中具有重要意义,是物体形状分析和对象检测和识别的有用工具,是理解图像语义信息的重要依据。 本文主要介绍了在 opencv 中,一些重要的用于处理物体轮廓

    2024年02月11日
    浏览(30)
  • 计算机视觉(2)——图像预处理

    二、图像预处理 2.1 介绍  2.2 特征提取方法 2.2.1 直方图 2.2.2 CLAHE 2.2.3 形态学运算 2.2.4 空间域处理及其变换 2.2.5 空间域分析及变换  (1) 均值滤波 (2)中值滤波 (3)高斯滤波 (4) 梯度Prewitt滤波 (5) 梯度Sobel滤波 (6) 梯度Laplacian滤波 (7) 其他滤波  2.2.6 频域分

    2024年02月03日
    浏览(49)
  • OpenCV图像预处理常用函数及流程

    在PyCharm终端中,运行如下命令 由于默认使用的为外网资源,下载速度和稳定性较差,具体看网络状态。如下命令为使用清华镜像下载安装相应的包 在终端中运行命令时,Windows10系统可能会存在如下报错:无法加载激活文件,因此在此系统上禁止运行脚本。此情况是因为win

    2024年02月05日
    浏览(41)
  • 【CV学习笔记】图像预处理warpaffine

    在学习图像预处理的时候发现,之前用的图像预处理方法一般为 resize和letter box,这两种方法比较低效,后来在手写AI中接触到了warpaffine,只需要一步就能够对图像进行预处理,同时还能很方便的进行cuda加速,于是便记录下来。 欢迎正在学习或者想学的CV的同学进群一起讨论与

    2023年04月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包