数字图像处理:基本算法-卷积和相关
2015-09-18 21:16
239 查看
在执行线性空间滤波时,经常会遇到两个概念相关和卷积二者基本相似,在进行图像匹配是一个非常重要的方法。
相关是滤波器模板移过图像并计算计算每个位置乘积之和的处理卷积的机理相似,但滤波器首先要旋转180度。
相关的计算步骤:
(1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方
(2)将输入图像的像素值作为权重,乘以相关核
(3)将上面各步得到的结果相加做为输出
卷积的计算步骤:
(1)卷积核绕自己的核心元素顺时针旋转180度
(2)移动卷积核的中心元素,使它位于输入图像待处理像素的正上方
(3)在旋转后的卷积核中,将输入图像的像素值作为权重相乘
(4)第三步各结果的和做为该输入像素对应的输出像素
超出边界时要补充像素,一般是添加0或者添加原始边界像素的值可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。
离散单位冲击:我们将包含单个1而其余全是0的函数成为离散单位冲击。重要性质:一个函数与离散单位冲击相关,在冲击位置产生这个函数的一个翻转版本。
f 函数,w 滤波器模板。
eg:
f(x,y)
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
w(x,y)
1 2 3
4 5 6
7 8 9
相关 f*w =
0 0 0 0 0
0 9 8 7 0
0 6 5 4 0
0 3 2 1 0
0 0 0 0 0
卷积f*w=
0 0 0 0 0
0 1 2 3 0
0 4 5 6 0
0 7 8 9 0
0 0 0 0 0
相关的用途:图象的匹配
假如函数f中存在w的一个复制版本,即f:
0 0 0 0 0
0 1 2 3 0
0 4 5 6 0
0 7 8 9 0
0 0 0 0 0
f*w是多少呢?读者也自己算吧。
9 26 50 38 21
42 94 154 106 54
90 186 285 186 90
54 106 154 94 42
21 38 50 26 9
是不是会发现w与f中w的复制版本重合时,该点的值最大。最大值为
1^2+2^2+……+9^2 = 285
这就是用相关进行图像匹配的基本原理。当然了,在图像匹配时还要进行
相关函数的归一化等操作。
matlab源代码:
滤波器卷积与相关运算结果对比(按道理来说两者的运算结果应该是一样的啊?此处保留该问题。见下面另一份代码):
改写了代码后:
关于full, same以及valid三种参数的区别,如下面的实例所示:
[b]full
[/b]
same
valid
参考资源:
【1】http://www.cnblogs.com/libing64/archive/2011/12/13/2878738.html
相关是滤波器模板移过图像并计算计算每个位置乘积之和的处理卷积的机理相似,但滤波器首先要旋转180度。
相关的计算步骤:
(1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方
(2)将输入图像的像素值作为权重,乘以相关核
(3)将上面各步得到的结果相加做为输出
卷积的计算步骤:
(1)卷积核绕自己的核心元素顺时针旋转180度
(2)移动卷积核的中心元素,使它位于输入图像待处理像素的正上方
(3)在旋转后的卷积核中,将输入图像的像素值作为权重相乘
(4)第三步各结果的和做为该输入像素对应的输出像素
超出边界时要补充像素,一般是添加0或者添加原始边界像素的值可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。
离散单位冲击:我们将包含单个1而其余全是0的函数成为离散单位冲击。重要性质:一个函数与离散单位冲击相关,在冲击位置产生这个函数的一个翻转版本。
f 函数,w 滤波器模板。
eg:
f(x,y)
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
w(x,y)
1 2 3
4 5 6
7 8 9
相关 f*w =
0 0 0 0 0
0 9 8 7 0
0 6 5 4 0
0 3 2 1 0
0 0 0 0 0
卷积f*w=
0 0 0 0 0
0 1 2 3 0
0 4 5 6 0
0 7 8 9 0
0 0 0 0 0
相关的用途:图象的匹配
假如函数f中存在w的一个复制版本,即f:
0 0 0 0 0
0 1 2 3 0
0 4 5 6 0
0 7 8 9 0
0 0 0 0 0
f*w是多少呢?读者也自己算吧。
9 26 50 38 21
42 94 154 106 54
90 186 285 186 90
54 106 154 94 42
21 38 50 26 9
是不是会发现w与f中w的复制版本重合时,该点的值最大。最大值为
1^2+2^2+……+9^2 = 285
这就是用相关进行图像匹配的基本原理。当然了,在图像匹配时还要进行
相关函数的归一化等操作。
matlab源代码:
%函数f f = [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]; %滤波器模板 w = [1 2 3 4 5 6 7 8 9]; %卷积 ff = conv2(f,w,'same') %这里的参数same见下面说明 %相关 ff2 = imfilter(f,w) %图像匹配的基本原理 f2 = [ 0 0 0 0 0 0 1 2 3 0 0 4 5 6 0 0 7 8 9 0 0 0 0 0 0]; ff3 = imfilter(f2,w)
滤波器卷积与相关运算结果对比(按道理来说两者的运算结果应该是一样的啊?此处保留该问题。见下面另一份代码):
img=imread('guass0.01.bmp'); %边缘检测滤波器模板 w = [-1 0 -1 0 4 0 -1 0 -1]; %卷积 ff = conv2(img,w,'same'); subplot(121);imshow(ff);title('卷积运算结果'); %相关 ff2 = imfilter(img,w); subplot(122);imshow(ff2);title('相关运算结果');
改写了代码后:
img=imread('guass0.01.bmp'); img=double(img); %边缘检测滤波器模板 w = [-1 0 -1 0 4 0 -1 0 -1]; %卷积 ff = conv2(img,w,'same'); subplot(121);imshow(ff);title('卷积运算结果'); %相关 ff2 = imfilter(img,w); subplot(122);imshow(ff2);title('相关运算结果');
关于full, same以及valid三种参数的区别,如下面的实例所示:
[b]full
[/b]
same
valid
参考资源:
【1】http://www.cnblogs.com/libing64/archive/2011/12/13/2878738.html
相关文章推荐
- 100 个最佳 Ubuntu 应用(中)
- 在 AppImage、Flathub 和 Snapcraft 平台上搜索 Linux 应用
- 24 个必备的 Linux 应用程序
- 注册表趣味应用小集
- 远程控制技术的应用
- 路由器访问列表的应用
- xDSL技术及其应用
- 基于XML的桌面应用
- SQL Server 2008 R2 应用及多服务器管理
- PHP GD 图像处理组件的常用函数总结
- PHP图像处理之imagecreate、imagedestroy函数介绍
- ExtJS 2.0实用简明教程之应用ExtJS
- jsvascript图像处理―(计算机视觉应用)图像金字塔
- JSP应用的安全问题
- Javascript图像处理思路及实现代码
- 前端开发必须知道的JS之闭包及应用
- PHP图像处理之使用imagecolorallocate()函数设置颜色例子
- java数字图像处理基础使用imageio写图像文件示例
- Geohash的原理、算法和具体应用探究
- javascript图像处理―边缘梯度计算函数