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

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

[复制链接]

该用户从未签到

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

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 k
1、  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 \

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 14:19 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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