EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
-------------------------------------conv2函数----------------------------------------
. [( s: u: Y, Z- q4 Q, T; w% z7 {1、用法- C=conv2(A,B,shape); %卷积滤波/ b0 W$ f/ i, o! F6 c; Q. Z' g
x2 _, c. l: B9 ~6 [
4 k D" Y6 W( i1 D
0 y( {# u2 Y% Z, I: O7 k W! rA:输入图像,B:卷积核& B0 v' y+ u4 o# `
假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则2 k5 \; `% m' a
当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)0 _# x4 t7 R2 p, ^
shape=same时,返回与A同样大小的卷积中心部分
% g6 A; K' _, b8 J3 Z0 `9 }3 C7 H shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)2 d8 @' E& ]- R- \
, G5 V& d6 Y7 v2 [4 G) m& F: x
; L$ C7 Q6 u9 E) r5 r2、实现步骤
0 _7 R1 q" X# |! k 假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:; f/ T6 @- K& b- s7 o
a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。) g$ d- H T9 b( D- Y. K
b、关于卷积核的中心,旋转卷积核180度。& }: b: `# K: G5 k7 C* P
c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。. W2 O$ Z7 T8 m7 n! ~ c
d、将旋转后的卷积核乘以对应的矩阵元素再求和。$ D* F! U2 M) X# w5 ^4 ?
1 F5 O% p# ~4 Z, [+ J0 e/ J3、实现过程展示
, C0 ]; `2 ?( f5 l 假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
; Z" F2 d6 p, X0 Z8 g9 {, k8 k a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零
/ H. \* r; B1 U" N3 s
* t2 X3 Y* J; Q5 X1 ]
" k2 a( S: {2 `. l7 u; V3 n2 S: B8 A6 Q P# G
b、将卷积核旋转180度
; m4 ^' E1 S+ k/ c/ L0 u
) ^0 x. I- N3 ^/ ?4 n
c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下) - M) G {. Y. S1 g+ l$ p& X
9 X1 a) ~3 Y1 {9 h4 s6 e c3 N' z
5 C) A' q2 N1 \6 A) N, \% z+ G" i1 v' H7 W _; U4 s
-------------------------------------filter2函数----------------------------------------# O0 f3 J: j1 u; \/ k, a8 x
1、用法- B = filter2(h,A,shape) ; %相关(correlation)滤波
! D! h$ \4 Y8 j L6 M1 @& M
6 {6 |0 d5 R( o+ m) P8 f9 W' U& I+ K& \
& W6 R# L6 g: a4 k9 hA:输入图像,h:相关核
: E& b, o' o3 Z! F 假设输入图像A大小为ma x na,相关核h大小为mb x nb,则$ I0 M% g0 B3 h) p
当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1)
# u# P$ E4 }: b! ~7 L% v0 O shape=same时,返回与A同样大小的卷积中心部分
# S! w% d, r4 J shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)7 z e* u# P; P$ d! R7 U
6 f0 p! n7 J0 s# [ \2 r
2、实现步骤
; \4 a/ k" g& L8 Q7 O: [ 假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下: a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。 b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。 c、将相关核乘以对应的矩阵元素再求和 注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。
/ k1 P# [9 p6 t; r4 I* X3、conv2(卷积滤波)和filter2(相关滤波)的结果比较- B- c& q' a- p6 z$ Q
A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]" j) G' s- G. `. e9 |
& \1 A; v7 C) S conv2,shape=full filter2,shape=full
- T$ i5 r! g3 [
5 c0 I2 F# b0 j$ X! V3 o# n
* E K8 }; P+ ]* E
0 { X& h5 |3 p x- Y7 I-------------------------------------imfilter----------------------------------------
; h4 N6 F0 d2 L) m# o1、用法- B=imfilter(A,H,option1,option2,option3);0 R% J v" M5 Z# B) ?! v
; V5 r' R! Y+ P7 E) N; ^. L l, x! p j! t
7 Y0 T6 A/ z& {+ @
A:输入图像,H:滤波核
2 T9 [2 @: T( d4 C option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular8 N- r: h$ R5 A8 N
option2:输出图像大小选项,可选的有same(默认),full; @: X- B, w; c5 u
option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波5 U4 l: {- [4 g8 |' @3 \/ r3 X
v$ y. q ^/ P+ N+ j- m7 P9 h! j$ i
# s% B2 v; M" q3 C, T F-------------------------------------最后总结----------------------------------------, \& p* ]. A; P, o5 m; _, [
1、 filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。 2、 imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。 8 K; F) ], H, a, Y! x( c' L( H
+ k+ K! X J4 N f/ d I* F3 o* W1 z, b \* M$ P! o0 u; U
" Q5 Q, I/ a& }; s2 G1 f+ [8 ^2 c2 k |