卷积和相关

来源:互联网 发布:linux查看文件的命令 编辑:程序博客网 时间:2024/04/28 13:43
在执行线性空间滤波时,经常会遇到两个概念相关和卷积
二者基本相似,在进行图像匹配是一个非常重要的方法。
相关是滤波器模板移过图像并计算计算每个位置乘积之和的处理
卷积的机理相似,但滤波器首先要旋转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
相关(用于图像匹配)*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源代码:

[cpp] view plaincopyprint?
  1. %函数f  
  2. f =  [0 0 0 0 0  
  3.     0 0 0 0 0   
  4.      0 0 1 0 0  
  5.     0 0 0 0 0  
  6.     0 0 0 0 0];  
  7. %滤波器模板  
  8. w = [1 2 3   
  9.      4 5 6   
  10.      7 8 9];  
  11. %卷积  
  12. ff = conv2(f,w,’same’)  
  13. %相关  
  14. ff2 = imfilter(f,w)  
  15.   
  16. %图像匹配的基本原理  
  17. f2 = [  0 0 0 0 0  
  18.         0 1 2 3 0   
  19.         0 4 5 6 0  
  20.         0 7 8 9 0  
  21.         0 0 0 0 0];  
  22.  ff3 = imfilter(f2,w)     
  23.       
%函数ff =  [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')%相关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)       


0 0
原创粉丝点击