【计算机视觉】Lecture 3:线性算子
回忆:二维梯度
梯度 = 图像 I(x,y)的偏导数向量 = [dI(x,y)/dx , dI(x,y)/dy]
梯度向量场表示最陡上升的方向和坡度(当考虑图像像素值为一个平面/高度图时)
数值导数
有限前向差分
有限后向差分
有限中心差分:更精准
例子:空间图像梯度
注意:从现在开始,我们将去掉常数因子1/2。我们在后面去除以它。
更具体地说
线性滤波器
一般流程:形成新图像,其像素是原始像素值的加权和,在每个点使用相同的权重集合
性质:输出是输入的一个线性函数;输出是输入的平移不变函数(即输入图像向左移动两个像素,输出也向左移动两个像素)
例子:平均滤波—邻域中像素的平均值
例子:高斯滤波—邻域中像素的加权平均值
例子:找一个导数—邻域中像素的加权平均值
注意:“线性滤波器”中的“线性”表示相邻像素值的线性组合
图像滤波
根据局部领域内像素的某些函数改变图像中的像素
线性滤波
最简单:线性滤波,通过领域内像素值的线性组合去替代每一个像素
线性组合的模块称为“卷积核”将其视为权加权和 (核指定权重):
100+50+30+40+5*.5+10+10+11+7.5 = 7
当然,我们不想只在一个像素上执行这个操作,而是希望在整个图像上运行这个核”
卷积(二维)
给定一个核(模板)f和图像h,卷积 f * h 定义为
1)注意h(x, y)邻域的奇怪索引。结果就是 f 好像在与 h 组合之前旋转了180度一样
2)如果 f 有180度的对称性也没关系
3)加入没有关系,那就使用交叉关联代替
卷积例子
实际问题:边界处理
问题:我们如何处理核不能完全覆盖图像边界的那些像素?
不同的边界处理方法指定了不同的方法来定义图像以外像素的值
最简单的方法之一是补零,也就是我们在前面的例子中默认使用的其他方法:
复制—每个图像以外的像素用图像中离它最近的像素值代替其他方法:
反射—在边界处反射像素值(好像有一面小镜子)其他方法:
环绕—当离开图像的右边框时,将环绕到左边框。类似地,当离开图像底部时,会在顶部重新输入。基本上,图像是一个大甜甜圈(或圆环)。
Matlab中的卷积
可以用conv和conv2,但可以用更新的版本:Imfilter(image,template{,option1,option2,…})
边界选项:常值,对称,复制,圆形
输出尺寸选项:和图像一样,或者全尺寸 (包括当mask在图像外的时候计算的部分值)
Corr或者conv选项:卷积旋转模板(我们之前所讨论的那样)。相关性没有。
尝试在命令行中输入“help imfilter”了解更多细节
卷积的性质
交换律:
结合律:
分配律:
线性:
平移不变性:
微分规则:
线性滤波
F (2m+1)x(2m+1) mask
例如
回到梯度…
有限差分滤波器
用卷积核计算有限差分
垂直边:
卷积:
水平边:
卷积: