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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-6 01:02 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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