EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
-------------------------------------conv2函数----------------------------------------$ F; ^4 n( `' u8 @. \& i
1、用法- C=conv2(A,B,shape); %卷积滤波
' u5 {# c- y8 t( c1 s2 C3 Z9 m
3 c' B/ O8 \, v. O5 c& }, j9 g! y" n, H6 j, H
! q, t8 q1 v* G& h; u" ^/ IA:输入图像,B:卷积核
. F. y9 y+ y2 k% Y% k 假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则7 B( J& \: H/ H- G' s, L
当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)6 O4 p2 s4 g; l# q) e
shape=same时,返回与A同样大小的卷积中心部分8 @* ~1 K) G! o2 ~, G2 O1 F
shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)
& k' M: ~6 L! U" P% M# c$ A4 V0 N
. m" j3 S2 Z8 f9 v" E! p% v* v3 {0 o2 v( r3 l/ z# J( e
2、实现步骤
( A0 y/ h5 R9 P 假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:8 I2 E4 T: [; \& j
a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。
! w( i) O1 g6 D: U b、关于卷积核的中心,旋转卷积核180度。" h e: X5 m4 L! q
c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。5 L7 k( w# {6 m. K4 N/ y! ?
d、将旋转后的卷积核乘以对应的矩阵元素再求和。# ^4 i* y! d9 f; g8 W
0 w7 l$ o# ^) d: L3 X3、实现过程展示
) x9 I$ H7 G4 t5 }& G% R 假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]! Z6 x# L* x2 T9 N1 G2 B
a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零
8 \ C4 E3 z, L4 f: I+ A; X
9 v1 R7 S6 P; z9 ~+ }$ l3 M: K. u% e! r& A
/ X, @5 S/ @8 d& t; {
' \* j* C1 _5 t# k9 ^
b、将卷积核旋转180度# b' Y. ], ~7 p, a+ ?. z* x" r5 i
* F3 s8 @5 p8 A# R6 i
c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下) 1 w9 }9 m/ M1 V/ x8 n1 ?. W2 E
3 {+ E3 }0 d6 [1 |% `
d, m. |% X- d( Z7 y9 _" p
/ F! q3 P7 H5 j-------------------------------------filter2函数----------------------------------------- t) A* s2 z$ \/ y; ^& N* @7 I
1、用法- B = filter2(h,A,shape) ; %相关(correlation)滤波
- " {! g2 n7 n& I+ I
* ?6 k9 ^0 Y8 n) G3 W% b- V
! N$ L, `7 Q6 p8 O8 l; s+ ~" Z1 P" t9 M9 S+ K" W& U2 u$ _
A:输入图像,h:相关核
* F9 a) x$ j2 B6 z 假设输入图像A大小为ma x na,相关核h大小为mb x nb,则
8 ~9 ^+ [3 J/ Z' h8 u y% ?" S 当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1)% D7 i! t# w9 k8 P7 L: e* n P
shape=same时,返回与A同样大小的卷积中心部分
# A: ]' e$ r+ u& N' T shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)
, e% C7 ^( ?. V, k' O2 D" V5 U* a2 y3 k$ A
2、实现步骤4 M5 ~! d# i# `5 O+ |8 i
假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下: a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。 b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。 c、将相关核乘以对应的矩阵元素再求和 注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。 j- _6 p8 \3 C) d5 ?
3、conv2(卷积滤波)和filter2(相关滤波)的结果比较
: O* Y! o1 D0 k' j A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
! G# K3 J- i$ ]9 e0 c
: I8 t5 N% b4 z7 M0 S8 Y+ P conv2,shape=full filter2,shape=full
8 Z( E* G4 U7 q* o9 i+ g
5 |" L7 E# I) L- S5 W2 b2 a! r, P. L q
, T9 J0 N0 |5 A8 @! Y% U) p3 D; o' K( S-------------------------------------imfilter----------------------------------------
+ U" U+ v6 n# H6 M% X1、用法- B=imfilter(A,H,option1,option2,option3);# x) b! l2 t7 @6 U3 a
2 Q% {6 D' N8 @) _
1 a0 g& |4 @& X8 ~4 W- {7 v$ K4 v8 k$ W3 M' H K
A:输入图像,H:滤波核
8 ]8 t8 D1 U- X9 v option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular4 ]; d5 C7 H0 \2 R6 |/ K. Z
option2:输出图像大小选项,可选的有same(默认),full7 r/ f3 X7 L t3 H- C: C
option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波0 S! [8 T% h6 ^$ I, V. \
" _6 `, D! j/ w' L+ ]
$ @1 m, N& s, V) I H6 f
0 D7 S+ Q3 F$ S2 e6 \. D6 T9 b
-------------------------------------最后总结----------------------------------------) H& Z) c. }* l* M4 G
1、 filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。 2、 imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。 ! l5 k7 Q2 ?3 ]8 f; J( z
/ _' |* Z% W$ e0 |
5 q# }6 G* N3 V9 `, ?$ o* R& Z
$ E6 i: j- E( ~" Z' B |