EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
-------------------------------------conv2函数----------------------------------------& v* X( `& C% P( K6 h! C' R1 k3 s/ L
1、用法- C=conv2(A,B,shape); %卷积滤波
9 _8 E- T# P# y! e! S1 R4 x8 ]
5 X6 x0 s6 L3 [3 U1 E4 F+ l- `1 t- |$ g
: |* \; x, W9 }# s
A:输入图像,B:卷积核; T+ O, ]2 C) E7 {
假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则: O, [" P2 c. {8 |/ d- P8 d+ A: C+ L
当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)+ i5 j# @) C! _8 C
shape=same时,返回与A同样大小的卷积中心部分
$ D5 D: m- Z, r+ s shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)
+ K5 \5 @9 }0 w1 d! g
3 ]! _9 e9 x7 N& M1 w: m) `' b9 ?0 n( i& ] y
2、实现步骤
! F3 f& F& v1 B: r. G! s* M 假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:
8 g. Q3 g9 ^+ ?- H8 n' a0 x6 l a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。
$ O! d1 z- |% K6 w b、关于卷积核的中心,旋转卷积核180度。
/ g# I2 e( J7 x c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。
( s; }# D6 v! S6 }2 [7 I d、将旋转后的卷积核乘以对应的矩阵元素再求和。
2 d+ @6 ? q8 m2 A
: L. x5 E0 b5 g3、实现过程展示
& z/ g2 ?7 @0 a" L* u% g 假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]5 h+ c( g6 v; s9 r0 f# O+ n
a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零& j! h% K$ n; u1 K* h; H
. i7 H- G; i; h, v
' t; g1 B& |- G/ t; Q" z" \- Z
0 `6 ] P9 z# K' W b、将卷积核旋转180度6 g! ~- Q4 z0 B5 D" O) m$ ~
* n9 R7 R! G' q3 ~2 U$ X, |& y c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下) , ~0 l( Z$ z, V
7 X4 c) E5 {7 L3 M3 S- T
- ]7 O) b: p+ P2 q7 p) [* {) P4 o5 C
# @3 d! P4 ~2 Z4 @
-------------------------------------filter2函数----------------------------------------
2 ^- @. T( @# V' e |1、用法- B = filter2(h,A,shape) ; %相关(correlation)滤波
3 ^& U( n& C9 |
& K5 }: _/ A# `1 V# _" k$ `
9 w% i- C$ E) p4 d& d; I
' F% K) g+ b7 Y- a* {; x3 S2 dA:输入图像,h:相关核: h, r# i9 l6 x8 i8 B5 c$ H+ Z
假设输入图像A大小为ma x na,相关核h大小为mb x nb,则) N$ h; D% {7 l0 h
当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1)
- c5 @8 s% g& v( j4 T5 } shape=same时,返回与A同样大小的卷积中心部分
- i9 |( [9 w1 S3 N shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)
) |# F( h4 E) Z4 C9 j* ]+ q4 Z
2、实现步骤- Y$ b5 D- F& @
假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下: a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。 b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。 c、将相关核乘以对应的矩阵元素再求和 注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。 3 n6 t, u- r5 d1 Z9 y4 M
3、conv2(卷积滤波)和filter2(相关滤波)的结果比较; x6 z6 d- _; ]3 I1 ]) ~: S w; K
A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
u" _ b3 J+ \" T" y9 X9 z) t
/ |: j0 a% Y5 X% U9 x/ d conv2,shape=full filter2,shape=full
" D4 b, J$ p9 w' Q; h
t% _- n7 }' U% h- ~6 t5 P6 W
9 r5 u2 t% p4 F/ D" m: l: Z
+ }& ~+ l4 Y, v2 k-------------------------------------imfilter----------------------------------------2 X: j5 S1 T& T h
1、用法- B=imfilter(A,H,option1,option2,option3);4 e( C# U# U7 T: A3 g; r# ]7 g
9 |: F" s5 |% Q; a* u5 |/ {2 K$ U. x# I9 H: \6 S
: Q) h) [ c* Q) X* N' s- lA:输入图像,H:滤波核
" M% t6 ?7 F$ z/ n* K7 x% A option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular
+ g/ p- G( g' D* x8 L( g9 }" r option2:输出图像大小选项,可选的有same(默认),full/ }9 o; l, k" ?0 S( ]
option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波
6 b! u9 l) p" ^) U4 w
! d1 z l% Y1 Q; w5 @- w& u v& [' {. s$ ^
d: b& g8 H2 e# I- `+ F
-------------------------------------最后总结----------------------------------------: _! B# x& I/ e- T% ~& R
1、 filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。 2、 imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。
+ J% ^7 g2 o" U
4 d: D2 e' f0 a. ~/ s1 `! i. A2 F, k0 \2 Z( q1 X
# \2 T! \) \ N" g/ Y" _0 K
|