EDA365电子论坛网
标题: matlab中的conv2、filter2、imfilter有哪些区别 [打印本页]
作者: dapmood 时间: 2020-7-20 13:40
标题: matlab中的conv2、filter2、imfilter有哪些区别
-------------------------------------conv2函数----------------------------------------7 N n% U* a* I8 }5 A' a
1、用法- C=conv2(A,B,shape); %卷积滤波% j/ M$ z$ c I/ d: b4 D2 d, i
8 j6 }5 `) B0 ]7 ~7 e
. {, _, }0 F# H, @( p. i- Z5 {
, r1 v) ?. I! R4 z/ P/ k" Z% f
A:输入图像,B:卷积核
! `6 ]6 Y! u. Z" J( w5 `1 t$ d 假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则
( N b1 n' _- [& B6 S9 ]/ Q 当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)( a0 k5 i5 z4 R& S# n& ]7 N( b( w
shape=same时,返回与A同样大小的卷积中心部分
h3 S/ n' o% R9 ^3 _ n4 d! Y! v shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)
( M8 _3 v& D! L, T9 p+ {4 d9 f8 g. |" B6 X# o# c
1 h9 E' C$ t, C$ W2、实现步骤! @. V1 y6 i8 l4 E# V
假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:( L, J( H: s# U% m
a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。) C' X" g' \( f2 X3 N9 C
b、关于卷积核的中心,旋转卷积核180度。
$ R) F6 e8 O% c1 c& ] c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。
5 ~1 ^- o, |5 }. H4 F4 p. O6 m2 S d、将旋转后的卷积核乘以对应的矩阵元素再求和。6 _5 u2 q* o" \: U. m8 I8 m8 V y6 D- M
3 C' v$ O' u& _0 i. T/ j# h9 s
3、实现过程展示
; h; i) f' t" x/ J* ]% i 假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]8 a" b! X( w- F. P5 w4 S5 y2 P
a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零1 P, ^; Z. b2 t8 n) s8 `% h) q) i) P+ b
- n, b Z: y( d3 E1 s, i U
( Q$ E/ R# j( w3 l8 ]
1 ~& U4 X2 k9 Y b、将卷积核旋转180度, L2 t# |. U& ` ~1 U+ s
& n3 t2 W z) k) e2 Z% {$ D c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下)
$ B9 Z! J. ]0 }$ ?% n0 {" p
/ D6 m: R7 C$ ~ }
* o" i$ w" L* P0 d4 r5 i9 o4 O9 y; T- X @0 y1 Q8 N% |
-------------------------------------filter2函数----------------------------------------/ c3 N8 n( O' Z! X
1、用法- B = filter2(h,A,shape) ; %相关(correlation)滤波
- ! g4 l6 E& z+ {% t7 I
; U' U5 G$ U, ~) Q4 f0 J7 p& B; J- @+ L7 n8 P2 _
) h2 f( ?9 }5 Z
A:输入图像,h:相关核( o5 p" O2 T8 v# I* y) d- S
假设输入图像A大小为ma x na,相关核h大小为mb x nb,则, `& b0 q' M$ Z$ C3 c+ r
当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1)
7 W7 H9 F9 z0 T! O( s4 @ shape=same时,返回与A同样大小的卷积中心部分
0 I/ Z3 O: W% f: n shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)9 x; V( Z4 b- h R' [; k
# B0 b' [; x$ x5 d7 A5 V2、实现步骤# z) b; w* E7 o! N. S
假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下:
a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。
b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。
c、将相关核乘以对应的矩阵元素再求和
注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。
, ^! @& p( T: S2 q: s2 z% {2 x
3、conv2(卷积滤波)和filter2(相关滤波)的结果比较7 l' U" U- Y( Y+ c) [- F" i) D
A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
9 F4 Z4 |: y+ U3 y3 J
3 v1 ~ M9 G0 d$ ~0 T conv2,shape=full filter2,shape=full
5 J" W( ]+ B- @; h3 F5 i) H1 L
2 C$ [1 Q7 Z3 E7 D4 \& z% q% q0 h0 \( d- ^( C6 @
-------------------------------------imfilter----------------------------------------1 D, q; U% |2 m
1、用法- B=imfilter(A,H,option1,option2,option3);5 x. o* i9 S; p, K0 S8 {
6 h9 ?3 t& C' @8 `
. D* A, N. s/ [9 I3 X
! G9 b& t. K s7 m
A:输入图像,H:滤波核' z) V: p, O& z3 N3 Q
option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular
8 `* z. U% S! ]9 h6 U1 i* Q% ] option2:输出图像大小选项,可选的有same(默认),full
. s/ X2 ?! {' l option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波5 w$ C1 O) C& B2 W$ B+ \1 P6 u
5 N! \% x" \. y. A! r
( `3 {, R5 Z* ?5 z. N
: V6 E5 e& R# c-------------------------------------最后总结----------------------------------------9 p& r! X' v; z7 W
1、 filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。
2、 imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。
/ I. S4 p5 u+ Y8 S" C/ l6 i# d$ [; q0 f6 O, K1 f! W( x
% C& i3 b: a2 ]5 p8 x5 |3 e
$ a7 y5 `- G. U$ s: H* }
作者: regngfpcb 时间: 2020-7-20 14:33
matlab中的conv2、filter2、imfilter的区别
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) |
Powered by Discuz! X3.2 |