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

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

[复制链接]

该用户从未签到

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

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 T
1、  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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-25 00:24 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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