找回密码
 注册
关于网站域名变更的通知
查看: 473|回复: 1
打印 上一主题 下一主题

matlab中的conv2、filter2、imfilter有哪些区别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-7-20 13:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
-------------------------------------conv2函数----------------------------------------
3 {# S- _5 \! B9 _1、用法
  • C=conv2(A,B,shape);        %卷积滤波0 X5 B4 |- X# }6 y
' w& t8 O  k+ l% I
- ?0 y1 f) Y$ I2 j+ D$ A. D. |! b
: Z) _3 M6 f; X
A:输入图像,B:卷积核
1 S  M2 V2 D; j. E% ~1 V! G       假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则. H! |+ Q% y# T$ a( W
       当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)
  V- K4 H  d3 A  p! n* ^      shape=same时,返回与A同样大小的卷积中心部分
4 D+ `6 ~! Y0 r* H       shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)
! t; y2 Q, v9 a' x% z5 g2 o- X! |
# F$ t8 N4 G7 b% q0 a  T
& R. D- ?5 _) c$ c2、实现步骤
" u0 Q9 \3 ?! s    假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:) s  S: d/ W4 W
        a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。
! m- w9 `& i' }0 x6 V        b、关于卷积核的中心,旋转卷积核180度。
& A: W3 R, y9 M& v( G        c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。
; Z7 Z1 {" F# t5 c# H+ P        d、将旋转后的卷积核乘以对应的矩阵元素再求和。1 R0 e& w+ k8 u: @2 E. I% {
8 Q7 Q0 ~6 J, a
3、实现过程展示
: ~5 c. a& B) Y! \- G     假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]# `- a7 @, j! v& c: L4 V- ]. \
         a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零
* K& i  v8 n! y4 W& s* L
" B0 O: v3 n) u( H6 F; l

         

3 Q3 g+ F# H4 y) a% B: ^$ t
/ ~7 R1 i7 S9 g) _1 A/ L" s4 _/ f0 E
         b、将卷积核旋转180度$ R& y0 w7 W) O
                      ! u+ L* L( n4 ~7 ~: n. W
         c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下)
  U2 [9 P- [, N4 A* A                             7 F+ K* b7 Y7 e, B

" k( D7 D$ [8 I9 M
0 \8 k6 E( F' Q) S5 A" g: e-------------------------------------filter2函数----------------------------------------; R$ w" B- K( G& [. g
1、用法
  • B = filter2(h,A,shape) ;        %相关(correlation)滤波

  • & R5 q! j: f3 I/ Q
7 Y& n1 u- ]/ Z2 a* `5 O" z

1 B8 o$ S" @4 l( a) k9 `7 W; ~6 `* J8 L! q
A:输入图像,h:相关核
4 ^+ `* }* [7 C. Z, e* g       假设输入图像A大小为ma x na,相关核h大小为mb x nb,则3 ]9 P! C8 Y9 s9 \2 A' d
       当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1). S6 v% l1 {' D; I7 b9 C8 V% O0 [
      shape=same时,返回与A同样大小的卷积中心部分% c3 }/ `9 f* T: I7 [7 s- i
       shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)
1 A' `, A( l% C0 m" ~1 l- v, ]% o) ^  B
2、实现步骤# }6 g) y7 g8 A3 n# _5 m* l
        假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下:
           a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。
           b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。
           c、将相关核乘以对应的矩阵元素再求和
                   注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。
3 o# z% f* J7 q" p' N
3、conv2(卷积滤波)和filter2(相关滤波)的结果比较
9 V# @5 T: M) `" H5 e        A=[4   3   1   2;0   1   1   3;5   2   0   0],卷积核B=[1    2    3;0   -1   2;1    1   0]/ M- \4 S. `6 q" R! Z
                                                 ! N4 b7 n1 u4 T2 w7 p. @
                                conv2,shape=full                                                                filter2,shape=full) p5 J: W$ }9 Z5 C1 i% I! M3 t

; X) Z/ w, E: @- v. w' c. v
. y1 f( w4 t, j
; t0 c9 A2 y3 ?3 E& M. Y% {; M-------------------------------------imfilter----------------------------------------( [4 R) \! R9 y5 m/ h
1、用法
  • B=imfilter(A,H,option1,option2,option3);. r0 L7 U/ j+ [' X0 c/ W

1 n" r' |5 Q1 c1 h% x' v" \8 W+ f. k0 Q/ y+ j3 X
6 K3 l5 t0 }8 I( T% }0 ^
A:输入图像,H:滤波核" x7 ]3 ^( Y9 M/ y
       option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular" S4 r5 u0 V( ~& z# m! S" u
       option2:输出图像大小选项,可选的有same(默认),full  ^' P! R. D4 x8 h
       option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波. m, s$ f' ^$ t! u, R9 d
3 u$ v2 q& w1 e( ?5 U
, p5 o& M& H- `. }) Q, S8 P4 }; M( f
( y/ D7 e1 U# x3 ~! f4 w
-------------------------------------最后总结----------------------------------------4 }* S* _5 v8 c0 z
1、  filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。
2、  imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。
" y; Q+ {+ M: q, |; |. j6 Y& V- G
! _9 d8 P5 {5 F, \" _8 K

! k' X4 j) u) q2 ]
( h% T( _1 x/ y; y) i, T

该用户从未签到

2#
发表于 2020-7-20 14:33 | 只看该作者
matlab中的conv2、filter2、imfilter的区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-23 10:38 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表