首先,图像滤波主要涉及线性滤波和非线性滤波两大类。
线性滤波主要有:方框滤波器,均值滤波器,高斯滤波器(注意:滤波器的名字,通常是根据他们的核的使用来命名的,核也可以叫做模板,掩膜,窗口,空间滤波器。名字好多!!!)
非线性滤波器主要有:中值滤波和双边滤波。
1、向量之间的卷积与相关
图像滤波就是让一个图像和一个掩膜去做卷积运算,所以首先我想简单介绍一下一维的卷积运算,以方便的向图像的二维空间进行扩展。
直接上代码,原理可以通过代码来理解,也可以参考冈萨雷斯数字图像处理书本相关章节。
% 实现卷积操作
% 下面分别通过调用matlab代码和自己来实现向量之间的卷积操作
% 涉及到矩阵卷积原理类似,只是实现起来稍微复杂。本程序就不涉及矩阵操作。
% 先实现两个向量的卷积
clc;close all;clear all;
input = [1 1 1 1]; % 供测试代码用
temp = [1 2 3 4];
fprintf('调用库函数imfilter完成相关运算');
imfilter(input, temp, 'conv', 0, 'full')
% 以下自己实现
[m, n] = size(input);
[h ,w] = size(temp); % 只考虑奇数向量
% 首先将模板旋转180度,注意卷积和相关的区别
temp(1:end) = temp(end : -1: 1);
% 边界通过0的值来扩展
input_temp = zeros(1, n + 2 * ( w - 1 ) );
input_temp(w: w + n - 1) = input(1:end); % 初始化输入向量
% 让模板滑过扩展的输入向量
kk = size(input_temp, 2) - w + 1 ;
output = zeros(1, kk);
for i = 1: kk
output(i) = sum ( input_temp(i : i + w - 1) .* temp(1: end) );
end
output
输出结果:
调用库函数imfilter完成相关运算
ans =
1 3 6 10 9 7 4
output =
1 3 6 10 9 7 4
注意卷积和相关的关系,只是将模板是否翻转180度的问题,得到的向量也就是对称关系的。
具体图像的滤波见下一个博客!!!!