在处理图像时,为了提取特征,经常用各种核函数和图像进行卷积,其实就是通过一个矩阵以滑窗的形式与原图像进行点乘求和,可以看作对一个像素和附近像素进行了加权平均。
比如经常用3x3的近似高斯卷积核
0 1 0
1 2 1
0 1 0
其实就是这幅图的俯视图中z值(高度)的近似,中间最高,边缘低。可见原来的一个像素现在经过卷积由周围的像素加权构成,所以以高斯为例,高斯有平滑效果。
但是刚才的举例是近似的于真正的高斯分布还有差距,我们怎么用matlab产生真正的高斯核呢?
fspecial函数:
可以在matlab的命令行输入help fspecial来查看用法
使用 h = fspecial('gaussian', hsize,sigma); 就可以产生一个高斯核,其中hsize是卷积核的大小,默认3x3,sigma是高斯核的方差
在用 filteredI = imfilter(I, h); 对原图像用刚才生成的和进行卷积就可以得到卷积后的图像。
fspecial还可以生成其他核,都很常用,各有用途。
'average' 'disk' 'laplacian' 'log' 'motion' 'prewitt' 'sobel' 'unsharp' 。
但有的时候需要自定义一个函数来通过滑窗处理图像,matlab也有相关的函数 -------- blockproc
B = blockproc(A,[M N],fun)
A是要处理的矩阵,[M N]是滑窗大小,fun是处理时执行的函数