EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
-------------------------------------conv2函数----------------------------------------8 ^+ [8 a$ f, n% F/ v& J2 u
1、用法- C=conv2(A,B,shape); %卷积滤波+ A5 V0 C$ c0 c3 O; [! z* W/ h& w8 \
9 Y: E* |, C) ]! l7 r7 A
+ q; l; o+ {/ Z
4 y w' N- V3 f- U/ c. p5 QA:输入图像,B:卷积核+ ?8 P9 s, z9 M( H5 s. y) R
假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则
9 d$ p% e' V; |/ }- Y I: }( Z 当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)1 b, K% c0 h# I q
shape=same时,返回与A同样大小的卷积中心部分
# ^ {: J5 d6 r) t7 f shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)
8 |* W$ P, W+ D$ q) |& W- I. u, |/ b3 t. H8 G
5 L4 ~! ?6 L/ D( ^( V( l+ M7 U3 \2、实现步骤# Y6 o0 C4 C# X- g; l
假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:
+ C3 N6 K% S% E5 c' } a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。% j3 u' J" D; v3 U W% U
b、关于卷积核的中心,旋转卷积核180度。& ~* b/ y6 j, M0 g, F
c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。
7 ?) h! z$ _9 U d、将旋转后的卷积核乘以对应的矩阵元素再求和。
5 {' @3 [* G) e/ \7 Y
9 |: b) B3 }5 M. H3、实现过程展示8 f. v9 Q, x- I# N
假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
9 l' O, E) R0 p; e% R6 J$ }2 z m a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零; V1 y- w: t/ M7 p% P0 ?' j( v
/ u' |$ g& [% h$ `
$ k2 \* [$ [+ C4 d' l4 ?
6 y% z/ V; B# n. `# [9 H
b、将卷积核旋转180度/ j! Z: _! R2 }7 t0 I
" G% K5 m [$ L5 t1 C9 ]- k c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下) 7 p' t1 K1 f5 M* J, ^
. k* |* u, F$ N3 r6 G6 T: S
: o1 s; }5 V" S( |6 A3 J6 f
4 W+ g* x- ]# X, U
-------------------------------------filter2函数----------------------------------------5 k: R" Z; N$ _, ]4 ^ r9 H
1、用法- B = filter2(h,A,shape) ; %相关(correlation)滤波
. q; V3 Y9 z1 I3 c
) O( d' O: L5 j U5 M' F7 Y! p" a0 A- e
" P, m" k) B" M9 y5 K" ~% r, V+ \A:输入图像,h:相关核# D8 `& ~0 H5 a7 Y+ x
假设输入图像A大小为ma x na,相关核h大小为mb x nb,则5 z8 S7 Y+ _* J! q( I- P6 |2 f
当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1)
2 I, C. k: u1 u7 C1 g X shape=same时,返回与A同样大小的卷积中心部分1 u: ~, v" f2 b8 h
shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)1 w, {+ V5 ?; ?% i% `( n8 I
3 g) U* F1 k4 t' A3 c2、实现步骤/ a$ T" o- p/ h2 V: ^. L9 J! }
假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下: a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。 b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。 c、将相关核乘以对应的矩阵元素再求和 注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。 . a( t L' g+ L3 u; k S
3、conv2(卷积滤波)和filter2(相关滤波)的结果比较
! e# z# i1 o7 ?+ M6 e7 n5 ^, k+ q A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]: F8 Y' @) ~; I7 t% K2 J
' s- J, D, E8 M' [
conv2,shape=full filter2,shape=full1 z) U V9 j; @
; e9 p. s' x$ ]# ~3 f2 \2 f
0 v) A7 l5 A: V. ^- U+ G: t
% y% k1 Z( l7 Z" _( B+ k" k1 [
-------------------------------------imfilter----------------------------------------
3 _* V- `) b; y4 M/ S: w) C% ^& q! A1、用法- B=imfilter(A,H,option1,option2,option3);% y2 P6 b$ ~1 H
) p8 {+ P7 b. {% m7 \
1 M- }8 H: M6 o! A! u2 o& x+ j
+ J* n ?! ? f( a1 q; UA:输入图像,H:滤波核
- C) c$ @' D- _0 p3 Q option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular5 M) b1 k# x v, G q
option2:输出图像大小选项,可选的有same(默认),full5 e9 n2 O+ U# v7 J% d
option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波! R0 N0 e& V6 S
; {3 }4 @2 @9 f- ~0 W' n, l+ ?2 {' y
+ ` z9 j6 T7 ^' F% o7 T; D
. h Y. M: n& o: z
-------------------------------------最后总结----------------------------------------
- c' p, G! Z& ]/ E I8 Y8 T1、 filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。 2、 imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。 . R) e5 {, B' }) Q
2 Z* e V+ B+ F
0 H2 v' K9 Z9 ?( p* J& s( G1 `5 h4 q: ?, ]* f" x- A6 U+ A
|