@Bruce1Tone
2020-05-22T08:52:59.000000Z
字数 5596
阅读 652
计算机视觉 模式识别
授课教师:
徐行 副教授;xing.xu@uestc.edu.cn
沈复民 特聘研究员 fumin.shen@gmail.com
办公室:主楼b1-204
实验室:创新中心3楼
课程包括
7个coding projects+期末
期末考察为课题报告30%
参考资料
- SVM支持向量机
[教材]数字图像处理与机器视觉Visual C++与Mat lab实现.张铮.人民邮电出版社
数字图像即位图,其坐标离散,且表示该图像的函数f(x,y),其中f,x,y都为非负有限离散
一般分为两类:
位图:数字阵列来表示,如
bmpjpggif
矢量图:矢量数据库表示
仅有黑白像素的图,0表示黑色,1表示白色
每个像素点用L表示灰度值,可能有256种或种取值,k=1时退化为二值图像
Red Green Blue
一般的8位颜色深度的图像,用8位二进制数据表示一个原色,但是为了书写方便,一般用2位16进制数表示,按RGB的顺序依次书写。
例如:
0x00FF00:表示纯绿色
0x000000:表示纯黑色
其中bmp就是未经压缩的原始文件,直接存储RGB数据,也成为了24位真彩色图像还有采用YCbCr格式存储颜色的方式,即
Y:亮度
Cb:蓝色偏移
Cr:红色偏移其中这三个参数是非对称的,Y的信息最多
将各种颜色的RGB值存储在调色板(Palette)/颜色查找表(LUT,Look Up Table)中,使每个像素存储的不是实际的RGB值,而是该种颜色在调色板中的索引位置。
当调色板的颜色数量没有减少时,该压缩为无损压缩
单位:ppi: pixels per inch
灰度级分辨率又称为色阶,即L,表示可分辨的灰度级数目
邻域:对于像素P
它的4邻域:
它的8邻域:
它的对角邻域(4个):
通路Path:P到Q有两两邻接的一系列像素连在一起,即称该像素序列为通路。如果P=Q则成为闭合通路,这里有4通路和8通路。
连通分量:像素集S中有任意像素P,S中连通到该像素的像素集叫做S的连通分量
连通集:如果S中仅有一个连通分量,则S成为连通集
区域Region:如果R是一个像素集,且它还是一个连通集,则称R为一个区域
边界Boundary:(这里还没完全搞清楚概念)
距离的定义:
如果函数D满足以下三个条件,则D可以被称为距离函数或度量:
- D(P,Q) ≥ 0,当且仅当P=Q时有D(P,Q)=0
- D(P,Q) = D(Q,P)
- D(P,Q) ≤ D(P,R) + D(R,Q)
常见的几种距离函数:
欧氏距离
距离(街区距离)
距离(棋盘距离)
点运算:对图像中的每一个像素点逐个进行同样的灰度变换运算。
邻域运算/邻域滤波;对图像中的每一个小范围(邻域)内的像素进行灰度变换运算
如果算子H对于任意两幅图像和、和任意两个标量a和b都满足:
平均平滑 高斯平滑 梯度锐化等都是线性运算,线性运算用途最广。[教材]计算机视觉——算法与应用 Richard Szeliski.清华大学出版社
教材3-2章节
三种滤波
将滤波器/滤波算子/核函数加到对应位置计算得到输出图像:
将滤波器与像素点一一对应,分别相乘,最后相加,得到一个值返回中心位置
correlation滤波函数:
f[k,l]就是滤波算子图像坐标系是以左上角为原点(0,0)
滤波器坐标系是以中心点为原点(0,0)
即方框滤波器,
作用是使画面亮度平均,可以用于图像平滑化
mean filter/均值滤波是特殊的box filter
所有点的权重相等的盒式滤波器,就成了均值滤波器
效果是得到Vertical Edge(竖直边缘检测),横向移动,最后要求绝对值
另外还有一种Sobel算子,纵向移动,最后得到Horizontal Edge(横向边缘检测)
所有元素的和为0
sharpening filter
所有元素的和为1
效果为凹版/凸版的浮雕
算子是指向性、非对称的
算子具有方向性
卷积函数
correlation协相关操作时,对于滤波算子是相加
convolution卷积操作时,对于滤波算子是相减

效果是高斯模糊,实际上是过滤了图像中的高频分量,相当于一个low-pass filter/低通滤波器
高斯滤波器具有separability/分离性,如下图所示:
分离出来的x轴和y轴两个滤波器可以分别进行滤波,得出的结果和单独的高斯滤波器结果一致
- 在2D卷积中,因为需要4个循环嵌套,所以速度较慢。
而利用滤波核的分离性,将之变成1D的滤波核,速度则会快的多- 一般滤波核为奇数×奇数,例如5×5的滤波核,半径就为2
图像的频率
图像频域中的分量:
高频:指图像当中亮度/灰度变化剧烈的地方,比如轮廓边缘等
低频:指图像中变化小的地方,比如大块的色块等
非线性滤波器,取领域的中值而非平均值
作用:祛除
椒盐噪声Salt and Pepper,即不规则的雪花点
即将图像A的高频部分和图像B的低频部分混叠在一起,远看是图像B(低频部分),近看是图像A(高频部分)
图像混叠问题Aliasing Problem
在直接降采样subsampling的时候,会导致图像的混叠问题,如下图所示

根据
奈奎斯特采样定律:采样频率至少为最高频率的两倍以上
所以,在降采样的时候,需要过滤掉多余的高频信息。
因此,解决方法是:
低通滤波器/low-pass filter,过滤掉新采样率一半以上的高频信息
频谱图的每一个点,对应一条正弦/余弦函数,且一张图像为整个重复的周期函数中的一个周期
在频谱图中,分为原始图像和中心化图像:
- 原始图像:中心为
高频信号,四周为低频信号,亮度值代表振幅- 中心化图像:将1-3、2-4象限对换之后,得到中心化的图像。
中心为低频信号,四周为高频信号,亮度值代表振幅,原点处为直流DC信号在之后的叙述中,如果未说明,默认都是中心化后的频谱图
频谱图的能量主要分布在低频部分,而高频的能量较少
原始图像的变化方向体现在频谱图就为法线方向
无论原始图像的位置如何平移,频谱图和相位图都不会有任何变化
当原始图像进行旋转时,两个图像都要发生改变
傅里叶级数Fourier Series
所有的数据都可以用一系列正弦、余弦波叠加得到。而傅里叶级数就是他们一系列的系数(振幅)
二维傅里叶分解
先对每一列做傅里叶分解,得到一系列长度相同的傅里叶系数向量。再将每一个向量的系数进行傅里叶变化即可
DFT与频谱图
上一步得到的矩阵就是未中心化的频谱图
边缘的定义是:亮度值的变化的一阶导数幅值最大的地方(但注意,如果局部内还有更大的,则不是边缘)
但是,由于图像当中存在噪声,会存在假边缘,解决方法是:
先进行高斯模糊,将噪声过滤掉。
再查找亮度函数的波峰,即为边缘
以x方向查找边缘为例:
方法一

上图中
f为原始图像,g为高斯核函数:
1. 先构建高斯核函数g
2. 对图像进行卷积滤波,计算出滤波后的函数f*g
3. 将滤波降噪后的函数对x轴求导数,得到
4. 找到导数的波峰就是边缘所在位置
方法二
简化后的操作方式

根据方法一进行改进,将高斯核函数先对
x求导,得到新的核函数,再进行滤波
1. 将高斯函数g对x轴进行求导,得到新的核函数:
2. 利用新的核函数进行滤波,直接得到卷积滤波后的图像
3. 找到导数的波峰就是边缘所在位置
原理:
对亮度brightness、颜色color、纹理texure三个层面进行边缘查找,最后合成得到最终结果
Canny边缘检测的方法为:
- 先对图像进行
高斯滤波,去除噪声- 从2个(或4个)角度进行边缘检测,如x、y轴方向,一般利用
Sobel算子检测的边缘粗大明亮
得到x方向和y方向的差分(滤波结果)和:
- 计算
梯度的幅值(模)G和方向θ:
其中,atan2()是求方位角的函数- 非极大值抑制:
因为Sobel算子得到的结果是粗大明亮,即边缘较宽,不够准确,因此需要进一步细化:
a. 比较该点正负梯度方向的两个点梯度强度大小
b. 如果是三点中最大的,则保留。如果不是三点中最大的,则抑制,即梯度值设为0- 双阈值
一般会设置高低两个阈值T和t:
当梯度值高于T时,标记为强边缘点
当梯度值介于t和T之间时,标记为弱边缘点
当梯度值小于t时,直接抑制,即梯度值设为0- 滞后边界追踪
当弱边缘点与强边缘点在一个连通域,则保留
当弱边缘点为孤立点时,则直接舍弃,梯度值设为0
在该方法中,值的大小会影响边缘检测的效果
精细的边缘大尺度的边缘在检测过程中,我们使用滑窗作为检测单位
实验要求:
将不同图像进行高通滤波和低通滤波,然后进行图像混叠
基本操作
from PIL import Imageimg = Image.open(xxx.bmp) #打开文件img = Image.open(xxx.bmp).convert('L') #转换成灰度图像(L)img.show() #显示图像img.save(xxx.jpg) #存储图像
滤波函数
from PIL import ImageFilterimg_blur = img_filter(ImageFilter.BLUR) #模糊滤波#高通滤波def HighPass(self,size):crow = int(self.rows/2)ccol = int(self.cols/2)self.fshift[crow-size:crow+size, ccol-size:ccol+size] = 0
傅里叶变换
#对图像傅里叶变换def FT(self):f = np.fft.fft2(self.img)self.fshift = np.fft.fftshift(f)#对图像傅里叶逆变换def IFT(self):ishift = np.fft.ifftshift(self.fshift)iimg = np.fft.ifft2(ishift)self.iimg = np.abs(iimg)
灵感记录
原始图像+随机噪声=加密图像
加密图像-随机噪声=原始图像
【混沌加密】