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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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