EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
-------------------------------------conv2函数----------------------------------------
W- \9 e: C: N1、用法- C=conv2(A,B,shape); %卷积滤波& o6 d9 p1 @/ G; {8 w
9 P, u& Z/ d9 l# b3 T/ j3 s* P! Q/ I/ o& H* h3 Y3 }$ s
- B. I/ |2 M8 p: l1 _
A:输入图像,B:卷积核
" p, w; m( v$ l" p; b 假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则( }9 Q2 X/ ?4 F/ ^) f h( @; p
当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)
4 ]8 Q) d5 W N# }. L; | shape=same时,返回与A同样大小的卷积中心部分2 R. F9 R3 s6 \2 ^, e
shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)' ^/ n% f- [* h% f5 l
9 N+ t) ]: e5 ?1 Y7 p/ Z
( k" M# y$ D) t' J: t! Z& l2、实现步骤
4 I" |, H' P N; k. l& x! J0 r& e+ f 假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:
/ U* y' S, p; C1 i* e a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。- ~0 k3 x; [# E( B2 t, D* d( D
b、关于卷积核的中心,旋转卷积核180度。8 L$ c/ N$ { k( n+ Z" s. X
c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。
1 c/ ]- m# h* K3 }6 q d、将旋转后的卷积核乘以对应的矩阵元素再求和。
: Z$ T1 b. G! e, v$ R1 R# w1 F [
3、实现过程展示. r- g, ]) X2 S( E1 p) T: l- \
假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]8 z( \1 E. y2 v- D; @. o
a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零
8 C0 @0 ]( e6 y# s4 H! A
+ O- v' N. [+ a) i2 ]- h* f1 f
: Y* ]$ D' P+ C% ]+ C& @; p: H
$ R7 \0 j W: {6 n- n! ? b、将卷积核旋转180度
/ x. H# P7 ]9 k( s
; M: n& w' M# s- c3 j U* H
c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下)
, |5 X4 w" N. [/ Y5 j
- b( [5 \/ C! o8 u, R
+ I. `6 r6 \ Q- R$ X# n' G. Q
# I: w/ Z3 y8 J! E1 d2 W-------------------------------------filter2函数----------------------------------------
' k8 l7 Q8 g2 |8 G1、用法- B = filter2(h,A,shape) ; %相关(correlation)滤波
- 7 M6 ^& l0 F, Z; k/ V
& z$ J0 u( n2 }) I4 C/ t$ v
; U0 L: Z5 Q, J4 i' g
7 B5 O" [# j( }% s! VA:输入图像,h:相关核% D+ D5 `% {' _: N! f# S% X! z' |; i
假设输入图像A大小为ma x na,相关核h大小为mb x nb,则
: D( i l' T. y 当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1)
/ K" T6 a$ l) k" [! { shape=same时,返回与A同样大小的卷积中心部分8 _. j5 [- c! r6 F
shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)5 w# Z" Z- b( A+ Y: {7 M3 K, }
7 R" ]; q& L/ S* }9 x
2、实现步骤' _2 |8 m8 w( {) a8 l# s
假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下: a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。 b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。 c、将相关核乘以对应的矩阵元素再求和 注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。 O% y1 X ?, _3 d+ j
3、conv2(卷积滤波)和filter2(相关滤波)的结果比较) D3 W2 ^3 E2 M
A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
' a5 A# [+ h ~
$ C9 O2 b o* i: `& b conv2,shape=full filter2,shape=full8 G# r9 v5 p. i$ ~5 a' c ?
2 Q) }2 {, E, \
8 K( D1 P7 |! ~0 ~* p' }/ v
% U$ M( y; {' W% ^9 {" ]) q-------------------------------------imfilter----------------------------------------
! K/ K- B( Q( w) j% B9 P1、用法- B=imfilter(A,H,option1,option2,option3);5 A b$ J* F4 a* D+ X) }2 w
J0 r) p5 e9 S" E4 K5 P# ^6 _
& Q) J* @! E6 a- K& K
X; e! J. x1 `7 Z. F3 y. |A:输入图像,H:滤波核
/ F/ x1 _6 M: N+ E% d option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular
9 S) E: Y- ?, ]9 l y9 l L1 } option2:输出图像大小选项,可选的有same(默认),full
5 m8 Z& B6 r' S b option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波
2 k3 q5 h$ f: R- Y) j! }, {
0 K4 d( V/ c" w! [% }
0 V6 L3 }* O5 E; ~ P0 h# S3 k+ u a- m/ G
-------------------------------------最后总结----------------------------------------
5 ^# a0 o o- o8 R! J! R. B. M" S/ \2 k1、 filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。 2、 imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。 ' g: I3 T8 m2 {' |& A; `
% ]1 [% _: r! g" C
6 |+ A ~% V, Y. M6 b7 ^( V5 i# q1 I$ V7 e2 \
|