AI学习笔记之图像与视频

  • 1、图像相关概念
    • 像素
    • 分辨率
    • 灰度
    • 色调
    • 通道
    • 对比度
    • RGB模型
    • 频率
  • 2、图像的取样与量化
    • 数字图像
    • 取样
    • 量化
  • 3、上采样与下采样
    • 上采样
      • 常用的插值方法
        • 1、最邻近插值The nearest iterpolation
        • 2、双线性插值
    • 下采样
  • 4、直方图
    • 直方图的种类及含义
    • 直方图的性质
    • 直方图的应用
      • 直方图均衡化的基本概念
      • 直方图均衡化的步骤
  • 5、滤波
  • 6、卷积
    • 卷积的原理
    • 过滤器、卷积核kernel
    • 卷积的应用
      • 一个没有任何效果的卷积
      • 平滑均值滤波
      • 高斯平滑
      • 图像锐化
      • Sobel边缘检测
    • 卷积解决的问题
      • 卷积--步长
      • 卷积--填充(padding)
        • same(相同)填充
        • valid(有效)填充
      • 卷积--3通道卷积

1、图像相关概念

像素

像素是分辨率的单位。像素是构成位图图像最基本的单元,每个像素都有自己的颜色。

分辨率

a)图像分辨率就是单位英寸内像素点数。单位为PPI(Pixels Per inch);
b)在生活中被混用,或者说错误的用作衡量图像内的像素点数量。

灰度

表示图像像素明暗程度的数值,也就是黑白图像中点的颜色深度。范围一般为0~255。白色为255,黑色为0。

色调

各种图像色彩模式下原色的明暗程度,级别范围从0到255,共256级色调。

通道

把图像分解成一个或多个颜色成分:
1)单通道:一个像素点只需一个数值表示,智能表示灰度,0为黑色(二值图和灰度图);
2)三通道:RGB模式,把图像分位红绿蓝三个通道,可以表示彩色,全0表示黑色;
3)四通道:RGBA模式,在RGB的基础上加上alpha通道,表示透明度,alpha=0表示全透明

对比度

指不同颜色之间的差别。对比度=最大灰度值/最小灰度值。

RGB模型

色彩三原色(CMYK):品红、黄、青
光学三原色(RGB):红、绿、蓝
RGB颜色模型是三维直角坐标颜色系统中的一个单位正方体,在正方体的主对角线上,各原色的量相等,产生由暗到量的白色,及灰度。(0,0,0)为黑,(1,1,1)为白,正方体的其他6个角点分别为红、黄、绿、青、蓝、品红。

频率

灰度值变化剧烈程度的指标,是灰度在平面空间上的梯度。

2、图像的取样与量化

数字图像

计算机保存的图像都是一个一个的像素点,称为数字图像。图像数字化过程由图像的取样与量化来完成。

取样

就是要用多少点来描述一幅图像,取样结果质量的高低就是用图像的分辨率来衡量的。

量化

是指要使用多大范围的数值来表示图像采样之后的一个点。数字化坐标值称为取样,数字化幅度值称为量化。
在取样时,若横向的像素数(列数)为M,纵向的像素数(行数)为N,则图像总像素数为M*N个像素。

3、上采样与下采样

上采样

放大图像(或称为上采样(uosampling)或图像插值(interpalating)的主要目的是放大图像,从而可以显示在更高分辨率的显示设备上。其原理为内插值。

常用的插值方法

1、最邻近插值The nearest iterpolation

设i+u,j+v(i,ji+u,j+v(i,ji+u,j+v(i,j为正整数,u,v,u,v,u,v为大于零小于1的小数,下同)))为待求像素坐标,则待求像素灰度值f(i+u,j+v)f(i+u,j+v)f(i+u,j+v)如下图所示:

2、双线性插值

f(i+u,j+v)=(1−u)∗(1−v)∗f(i,j)+(1−u)∗v∗f(i,j+1)+u∗(1−v)∗f(i+1,j)+u∗v∗f(i+1,j+1)f(i+u,j+v)=(1-u)*(1-v)*f(i,j)+(1-u)*v*f(i,j+1)+u*(1-v)*f(i+1,j)+u*v*f(i+1,j+1)f(i+u,j+v)=(1−u)∗(1−v)∗f(i,j)+(1−u)∗v∗f(i,j+1)+u∗(1−v)∗f(i+1,j)+u∗v∗f(i+1,j+1)


y−y0x−x0=y1−y0x1−x0y=x1−xx1−x0y0+x−x0x1−x0y1\frac{y-y_0}{x-x_0}=\frac{y_1-y_0}{x_1-x_0}\\y=\frac{x_1-x}{x_1-x_0}y_0+\frac{x-x_0}{x_1-x_0}y_1x−x0​y−y0​​=x1​−x0​y1​−y0​​y=x1​−x0​x1​−x​y0​+x1​−x0​x−x0​​y1​

在x方向做插值:
f(R1)≈x2−xx2−x1f(Q11)+x−x1x2−x1f(Q21)whereR1=(x1,y1)f(R2)≈x2−xx2−x1f(Q12)+x−x1x2−x1f(Q22)whereR2=(x1,y2)f(R_1)\approx\frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21})\;\;\;where\;\;R_1=(x_1,y_1)\\f(R_2)\approx\frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22})\;\;\;where\;\;R_2=(x_1,y_2)f(R1​)≈x2​−x1​x2​−x​f(Q11​)+x2​−x1​x−x1​​f(Q21​)whereR1​=(x1​,y1​)f(R2​)≈x2​−x1​x2​−x​f(Q12​)+x2​−x1​x−x1​​f(Q22​)whereR2​=(x1​,y2​)
在y方向做插值:
f(P)≈y2−xy2−y1f(R1)+y−y1y2−y1f(R2)f(P)\approx\frac{y_2-x}{y_2-y_1}f(R_1)+\frac{y-y_1}{y_2-y_1}f(R_2)\;f(P)≈y2​−y1​y2​−x​f(R1​)+y2​−y1​y−y1​​f(R2​)
所以,综合起来有:
f(x,y)≈f(Q11)(x2−x1)(y2−y1)(x2−x)(y2−y)+f(Q21)(x2−x1)(y2−y1)(x−x1)(y2−y)+f(Q12)(x2−x1)(y2−y1)(x2−x)(y−y1)+f(Q22)(x2−x1)(y2−y1)(x−x1)(y−y1)f(x,y)\approx\frac{f(Q_{11})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y_2-y)+\frac{f(Q_{21})}{(x_2-x_1)(y_2-y_1)}(x-x_1)(y_2-y)\\+\frac{f(Q_{12})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y-y_1)+\frac{f(Q_{22})}{(x_2-x_1)(y_2-y_1)}(x-x_1)(y-y_1)f(x,y)≈(x2​−x1​)(y2​−y1​)f(Q11​)​(x2​−x)(y2​−y)+(x2​−x1​)(y2​−y1​)f(Q21​)​(x−x1​)(y2​−y)+(x2​−x1​)(y2​−y1​)f(Q12​)​(x2​−x)(y−y1​)+(x2​−x1​)(y2​−y1​)f(Q22​)​(x−x1​)(y−y1​)

下采样

缩小图像(或称为下采样(subsampled)或降采样(downsampled)的主要目的:1)使得图像复合显示区域的大小;2、生成对应图像的缩略图。其原理为(M/s)*(N/s)。

4、直方图

直方图的种类及含义

在图像处理中,经常用到直方图,如颜色直方图、灰度直方图等。
图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示图像分钟各个灰度级所占多少。
图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数,其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。

直方图的性质

1、直方图反映了图像中的灰度级分布规律。它描述每个灰度级具有的像素个数,但不包含折现像素在图像中的位置信息。
2、任何衣服规定的图像都有唯一的直方图与之对应,但不同的图像可以有相同的直方图。
3、如果一幅图像有两个不相连的区域组成,并且每个区域的直方图一致,则整幅图像的直方图是该连个区域的直方图之和。

直方图的应用


获取直方图方法如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt'''
calcHist—计算图像直方图
函数原型:calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None)
images:图像矩阵,例如:[image]
channels:通道数,例如:0
mask:掩膜,一般为:None
histSize:直方图大小,一般等于灰度级数
ranges:横轴范围
'''# 灰度图像直方图
# 获取灰度图像
img = cv2.imread("lenna.png", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 灰度图像的直方图,方法一
plt.subplot(231)
plt.imshow(gray)
plt.title('get histogram method 1 - lenna.png')
plt.subplot(234)
plt.hist(gray.ravel(), 256)
plt.title('get histogram method 1')# 灰度图像的直方图, 方法二
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
plt.subplot(232)
plt.imshow(gray)
plt.title('get histogram method 2 - lenna.png')
plt.subplot(235)
plt.plot(hist)
plt.title("get histogram method 2")
plt.xlabel("Bins")  # X轴标签
plt.ylabel("# of Pixels")  # Y轴标签
plt.xlim([0, 256])  # 设置x坐标轴范围# 彩色图像直方图
plt.subplot(233)
plt.imshow(img)
plt.title("lenna.png")plt.subplot(236)
chans = cv2.split(img)
colors = ("b", "g", "r")
for (chan, color) in zip(chans, colors):hist = cv2.calcHist([chan], [0], None, [256], [0, 256])plt.plot(hist, color=color)plt.xlim([0, 256])
plt.title("Flattened Color Histogram")
plt.xlabel("Bins")
plt.ylabel("# of Pixels")
plt.show()

运行结果如下:

直方图均衡化的基本概念

直方图均衡化是将源图像的直方图通过变换函数变成均匀的直方图,然后按均匀直方图修改原图像,从而获得衣服灰度分布均匀的新图像。直方图均衡化的作用是图像增强。

为了将源图像的亮度范围进行扩展,需要一个映射函数,将原图像的像素值均衡映射到新直方图中,这个映射函数有两个条件:
1、为了不打乱原有的顺序,映射后亮、暗的大小关系不能改变;
2、映射后必须在原有的范围内,比如(0~255)

直方图均衡化的步骤

1、依次扫描原始图像的每一个像素,计算出图像的灰度直方图H
2、计算灰度直方图的累加直方图
3、根据累加直方图和直方图均衡化原理得到输入输出之间的映射关系
4、最后根据映射关系得到结果:dst(x,y)=H′(src(x,y))dst(x,y)=H'(src(x,y))dst(x,y)=H′(src(x,y))进行图像变换。

1、对于输入图像的任意一个像素p,p∈[0,255]p,p\in\lbrack0,255\rbrackp,p∈[0,255],总能在输出图像里有对应的像素q,q∈[0,255]q,q\in\lbrack0,255\rbrackq,q∈[0,255]使得下面的等式成立(输入和输出的像素总量相等):
∑k=0phistinput(k)=∑k=0qhistiout(k)\sum_{k=0}^phist_{input}(k)=\sum_{k=0}^qhist_{iout}(k)k=0∑p​histinput​(k)=k=0∑q​histiout​(k)
2、其中,输出图像每个灰度级的个数:
histiout(k)=H∗W256,k∈[0,255]hist_{iout}(k)=\frac{H\ast W}{256},k\in\lbrack0,255\rbrackhistiout​(k)=256H∗W​,k∈[0,255]
3、带入累加直方图公式:
∑k=0phistinput(k)=(q+1)H∗W256→q≈∑k=0phistinput(k)H∗W∗256−1\sum_{k=0}^phist_{input}(k)=(q+1)\frac{H\ast W}{256}\rightarrow q\approx\sum_{k=0}^p\frac{hist_{input}(k)}{H\ast W}\ast256-1k=0∑p​histinput​(k)=(q+1)256H∗W​→q≈k=0∑p​H∗Whistinput​(k)​∗256−1

直方图均衡化代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt'''
equalizeHist—直方图均衡化
函数原型: equalizeHist(src, dst=None)
src:图像矩阵(单通道图像)
dst:默认即可
'''# 获取灰度图像
img = cv2.imread("lenna.png", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 原图直方图
hist0 = cv2.calcHist([gray], [0], None, [256], [0, 256])# 灰度图像直方图均衡化
dst = cv2.equalizeHist(gray)
hist1 = cv2.calcHist([dst], [0], None, [256], [0, 256])plt.figure()
plt.subplot(131), plt.imshow(gray), plt.axis('off'), plt.title('lenna.png')
plt.subplot(132), plt.plot(hist0), plt.title('histogram')
plt.subplot(133), plt.plot(hist1), plt.title('histogram equalization')
plt.show()

运行结果如下:

5、滤波

线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。

6、卷积

卷积的原理

卷积的原理和滤波类似。但是卷积却有着细小的差别。卷积操作也是卷积核与图像对应位置的乘积和,但是卷积操作在做乘积之前,需要先将卷积核翻转180度,之后再做乘积。卷积负责提取图像中的局部特征。
卷积的数学定义:
(f∗g)(t)=∫Rf(x)g(t−x)d⁡x(f\ast g)(t)=\int_Rf(x)g(t-x)\operatorname dx(f∗g)(t)=∫R​f(x)g(t−x)dx
一般称为g为作用在f上的filter或kernel。

过滤器、卷积核kernel

对于滤波器,也有一定的规则要求:
1)滤波器的大小应该是奇数,这样他才有一个中心,例如3x3,5x5或7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。
2)滤波器矩阵所有元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。但这不是硬性要求。
3)如果滤波器所有元素之和大于1,那么滤波后的图像就会比原来亮,反之,如果小于1,那么得到的图像就会变暗。如果等于0,图像不会变黑,但也会非常暗。
4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间。对于负数,也可以取绝对值。

在具体应用中,往往有多个卷积核,可以认为,每个卷积核代表了一种图像模式。如果某个图像块与此卷积核卷积处的值大,则认为此图像十分接近于此卷积核。

用Gx来卷积下面这张图的话,就会在中间黑白边界获得比较大的值。

卷积的应用

一个没有任何效果的卷积

将原像素中间像素值乘1,其余全部乘0,显然像素值不会发生任何变化。

平滑均值滤波

取九个值得平均值代替中间像素值,起到平滑的效果。

高斯平滑

高斯平滑水平和垂直方向呈现高斯分布,更突出了中心点在像素平滑后的权重,相比于均值滤波而言,有着更好的平滑效果。

图像锐化

图像锐化使用的是拉普拉斯变换核函数:

Sobel边缘检测

Sobel更强调了和边缘相邻的像素点对边缘的影响。

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("lenna.png", 1)
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)'''
Sobel算子
Sobel算子函数原型如下:
dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
前四个是必须的参数:
第一个参数是需要处理的图像;
第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;
dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。
其后是可选的参数:
dst是目标图像;
ksize是Sobel算子的大小,必须为1、3、5、7。
scale是缩放导数的比例常数,默认情况下没有伸缩系数;
delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。
'''img_sobel_x = cv2.Sobel(img_gray, cv2.CV_64F, 1, 0, ksize=3)  # 对x求导
img_sobel_y = cv2.Sobel(img_gray, cv2.CV_64F, 0, 1, ksize=3)  # 对y求导plt.subplot(131), plt.imshow(img_gray, "gray"), plt.title("Original")
plt.subplot(132), plt.imshow(img_sobel_x, "gray"), plt.title("Sobel_x")
plt.subplot(133), plt.imshow(img_sobel_y, "gray"), plt.title("Sobel_y")
plt.show()

运行结果如下:

卷积解决的问题

卷积负责提取图像中的局部特征

卷积–步长

如果用(f,f)的过滤器来卷积一张(h,w)大小的鱼片,每次移动一个像素的话,那么得出的结果就是(h-f+1,w-f+1)。f是过滤器大小,h和w分别表示图片的高宽。
如果每次不止移动一个像素,而是s个像素(s叫做步长),那么结果会变为:
(h−fs+1,w−fs+1)\left(\frac{h-f}s+1,\frac{w-f}s+1\right)(sh−f​+1,sw−f​+1)
存在的问题:
⋅\cdot⋅只要是f或s的值比1要大的话,那么每次卷积之后结果的长宽,要比卷积前小一些,造成信息丢失。

卷积–填充(padding)

same(相同)填充

有了填充之后,每次卷积之后的图像大小:
(h−fs+1,w−fs+1)⇒(h−f+2ps+1,w−f+2ps+1)\left(\frac{h-f}s+1,\frac{w-f}s+1\right)\Rightarrow\left(\frac{h-f+2p}s+1,\frac{w-f+2p}s+1\right)(sh−f​+1,sw−f​+1)⇒(sh−f+2p​+1,sw−f+2p​+1)
此时假设高(宽)不变(same填充)
h−f+2ps+1=h⇒p=s(h−1)−h+f2\frac{h-f+2p}s+1=h\Rightarrow p=\frac{s(h-1)-h+f}2sh−f+2p​+1=h⇒p=2s(h−1)−h+f​
假设步长为1,则有:
p=f−12p=\frac{f-1}2p=2f−1​

valid(有效)填充

有了填充之后,每次卷积之后图像的大小:
(h−f+2ps+1,w−f+2ps+1)\left(\frac{h-f+2p}s+1,\frac{w-f+2p}s+1\right)(sh−f+2p​+1,sw−f+2p​+1)
当遇到分数时,只取正数部分。而这种p=0,然后结果取整数部分的处理方式,就叫做"Valid(有效)填充"

卷积–3通道卷积

AI学习笔记(二)图像与视频相关推荐

  1. AI学习笔记(七)图像滤波器、OpenCV算法解析

    AI学习笔记之图像滤波器.OpenCV算法解析 图像滤波器 图像噪声 噪声的产生 信噪比 高斯噪声 椒盐噪声 其他噪声 图像滤波 滤波的目的 滤波的要求 各种滤波器 均值滤波 中值滤波 最大最小值滤波 ...

  2. AI学习笔记(十二)物体检测(上)

    AI学习笔记之物体检测(上) 物体检测简介 常见检测网络 IOU TP.TN.FP.FN precision(精确度)和recall(召回率) 边框回归 边框回归具体方法 Selective Sear ...

  3. AI学习笔记(四)相机模型、图像聚类算法

    AI学习笔记之相机模型.图像聚类算法 相机模型 相机与图像 坐标系 相机成像 世界坐标系到摄像机坐标系 摄像机坐标系到图像物理坐标系 图像物理坐标系到图像像素坐标系 摄像机坐标系到图像像素坐标系 世界 ...

  4. AI学习笔记(十四)CNN之图像分割

    AI学习笔记之CNN之图像分割 图像分割 问题引入 实现技术手段及分类 语义分割-FCN(Fully Convolutional Networks) FCN--deconv 反卷积的具体步骤 Unpo ...

  5. AI学习笔记(十三)CNN之人脸检测

    AI学习笔记之CNN之人脸检测 人脸检测 人脸检测概念 人脸检测的难点 人脸检测的主要用途 mtcnn 主要步骤 构建图像金字塔 P-Net(Proposal Network) R-Net(Refin ...

  6. AI学习笔记之——如何理解机器学习(Machine Learning)

    前面虽然介绍了概率和贝叶斯网络,但是还是没有正式介绍AI中最重要的算法--机器学习.如果说概率论是机器学习的基石,那么机器学习算法和理论就是支撑整个AI系统的支柱.现在比较火的深度学习神经网路等等其实 ...

  7. AI学习笔记(十一)CNN之图像识别(上)

    AI学习笔记之CNN之图像识别(上) 图像识别 图像识别简介 模式识别 图像识别的过程 图像识别的应用 分类与检测 VGG Resnet 迁移学习&inception 卷积神经网络迁移学习fi ...

  8. AI学习笔记(十)卷积神经网络

    AI学习笔记之卷积神经网络 卷积神经网络简介 卷积层 池化层 卷积神经网络 卷积核 填充padding 常见的卷积神经网络 cifar-10预测实例 数据预处理--图像增强 图像增强常用方法 Alex ...

  9. AI学习笔记(九)从零开始训练神经网络、深度学习开源框架

    AI学习笔记之从零开始训练神经网络.深度学习开源框架 从零开始训练神经网络 构建网络的基本框架 启动训练网络并测试数据 深度学习开源框架 深度学习框架 组件--张量 组件--基于张量的各种操作 组件- ...

最新文章

  1. python-docx 使用教程_python docx 中文字体设置的操作方法
  2. 多元价值呼唤教育性父母
  3. android onresume时view,android – 在使用ViewPager滑动时,Fragment不会调用OnResume()
  4. 最大信息系数MIC--minepy安装
  5. Java 源码中 unchecked 什么意思
  6. SAP UI5 main page design
  7. oracle数据库导入_oracle数据库导入数据
  8. 全开源新淘商城系统源码
  9. OSPF NSSA 默认路由的问题
  10. 如何看待NLP领域最近比较火的prompt,能否借鉴到CV领域?
  11. hasp hl加密狗驱动
  12. 基于汇川AM402编写跑马灯程序
  13. 半导体物理学——(二)半导体中杂志和能级缺陷
  14. 笔记 左程云算法基础
  15. 工业相机常见的数据传输接口方式
  16. zkLedger: Privacy-Preserving Auditing for Distributed Ledgers
  17. 干掉Google Base? 微软欲推Fremont服务 (转自donews.com)
  18. 苹果8p电池多少毫安的_买得起手机未必用得起售后:苹果iPhone12修一下多少钱?|iphone12|手机|电池|iphone...
  19. 如何添加论文参考文献
  20. Chinese Segmentation Introduction

热门文章

  1. Dubbo源码分析(一)Dubbo与Spring集成实例
  2. 2.4 Python 模块的使用安装导入
  3. 一波黑科技即将袭来!StarVR带你感受他们的未来
  4. leetcode 456. 132 Pattern 132模式 题解(栈)
  5. easy datagrid 按钮控制
  6. ubuntu--雷鸟只能收邮件不能发邮件
  7. [轉]解决Windows XP下缩略图显示模式下文件夹没有名称的方法
  8. 用户空间与内核空间数据交换的方式(2)------procfs
  9. 《Summer Tree》第八期封面
  10. 6.计算机在信息技术中的地位,信息技术在教育中的作用与地位