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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
-------------------------------------conv2函数----------------------------------------
. [( s: u: Y, Z- q4 Q, T; w% z7 {1、用法
  • C=conv2(A,B,shape);        %卷积滤波/ b0 W$ f/ i, o! F6 c; Q. Z' g

  x2 _, c. l: B9 ~6 [
4 k  D" Y6 W( i1 D
0 y( {# u2 Y% Z, I: O7 k  W! rA:输入图像,B:卷积核& B0 v' y+ u4 o# `
       假设输入图像A大小为ma x na,卷积核B大小为mb x nb,则2 k5 \; `% m' a
       当shape=full时,返回全部二维卷积结果,即返回C的大小为(ma+mb-1)x(na+nb-1)0 _# x4 t7 R2 p, ^
      shape=same时,返回与A同样大小的卷积中心部分
% g6 A; K' _, b8 J3 Z0 `9 }3 C7 H       shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回C的大小为(ma-mb+1)x(na-nb+1)2 d8 @' E& ]- R- \

, G5 V& d6 Y7 v2 [4 G) m& F: x
; L$ C7 Q6 u9 E) r5 r2、实现步骤
0 _7 R1 q" X# |! k    假设输入图像A大小为ma x na,卷积核大小为mb x nb,则MATLAB的conv2函数实现流程如下:; f/ T6 @- K& b- s7 o
        a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零)。) g$ d- H  T9 b( D- Y. K
        b、关于卷积核的中心,旋转卷积核180度。& }: b: `# K: G5 k7 C* P
        c、滑动卷积核,将卷积核的中心位于图像矩阵的每一个元素。. W2 O$ Z7 T8 m7 n! ~  c
        d、将旋转后的卷积核乘以对应的矩阵元素再求和。$ D* F! U2 M) X# w5 ^4 ?

1 F5 O% p# ~4 Z, [+ J0 e/ J3、实现过程展示
, C0 ]; `2 ?( f5 l     假设有图像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷积核B=[1 2 3;0 -1 2;1 1 0]
; Z" F2 d6 p, X0 Z8 g9 {, k8 k         a、首先是按照上面的步骤进行补零,如下图外圈红色的为补出的零
/ H. \* r; B1 U" N3 s
* t2 X3 Y* J; Q5 X1 ]

         


" k2 a( S: {2 `. l7 u; V3 n2 S: B8 A6 Q  P# G
         b、将卷积核旋转180度
; m4 ^' E1 S+ k/ c/ L0 u                      ) ^0 x. I- N3 ^/ ?4 n
         c、将旋转后的核在A上进行滑动,然后对应位置相乘,最后相加,下面分别是shape=full,same,valid时取输出图像大小的情况,位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下) - M) G  {. Y. S1 g+ l$ p& X
                           
9 X1 a) ~3 Y1 {9 h4 s6 e  c3 N' z
5 C) A' q2 N1 \6 A) N, \% z+ G" i1 v' H7 W  _; U4 s
-------------------------------------filter2函数----------------------------------------# O0 f3 J: j1 u; \/ k, a8 x
1、用法
  • B = filter2(h,A,shape) ;        %相关(correlation)滤波

  • ! D! h$ \4 Y8 j  L6 M1 @& M

6 {6 |0 d5 R( o+ m) P8 f9 W' U& I+ K& \

& W6 R# L6 g: a4 k9 hA:输入图像,h:相关核
: E& b, o' o3 Z! F       假设输入图像A大小为ma x na,相关核h大小为mb x nb,则$ I0 M% g0 B3 h) p
       当shape=full时,返回全部二维卷积结果,即返回B的大小为(ma+mb-1)x(na+nb-1)
# u# P$ E4 }: b! ~7 L% v0 O      shape=same时,返回与A同样大小的卷积中心部分
# S! w% d, r4 J       shape=valid时,不考虑边界补零,即只要有边界补出的零参与运算的都舍去,返回B的大小为(ma-mb+1)x(na-nb+1)7 z  e* u# P; P$ d! R7 U
6 f0 p! n7 J0 s# [  \2 r
2、实现步骤
; \4 a/ k" g& L8 Q7 O: [
        假设输入图像A大小为ma x na,相关核h大小为mb x nb,MATLAB的filter2的实现流程如下:
           a、对输入图像补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意filter2不支持其他的边界补充选项,函数内部对输入总是补零)。
           b、滑动相关核,将相关核的中心位于图像矩阵的每一个元素。
           c、将相关核乘以对应的矩阵元素再求和
                   注意filter2不对核进行180°旋转,直接对应相乘再相加,这一点与filter2不同,下面有两者计算结果对比可看出这一点。

/ k1 P# [9 p6 t; r4 I* X3、conv2(卷积滤波)和filter2(相关滤波)的结果比较- B- c& q' a- p6 z$ Q
        A=[4   3   1   2;0   1   1   3;5   2   0   0],卷积核B=[1    2    3;0   -1   2;1    1   0]" j) G' s- G. `. e9 |
                                                
& \1 A; v7 C) S                                conv2,shape=full                                                                filter2,shape=full
- T$ i5 r! g3 [
5 c0 I2 F# b0 j$ X! V3 o# n
* E  K8 }; P+ ]* E
0 {  X& h5 |3 p  x- Y7 I-------------------------------------imfilter----------------------------------------
; h4 N6 F0 d2 L) m# o1、用法
  • B=imfilter(A,H,option1,option2,option3);0 R% J  v" M5 Z# B) ?! v

; V5 r' R! Y+ P7 E) N; ^. L  l, x! p  j! t
7 Y0 T6 A/ z& {+ @
A:输入图像,H:滤波核
2 T9 [2 @: T( d4 C       option1:边界选项,可选的有:补充固定的值X(默认都补零),symmetric,replicate,circular8 N- r: h$ R5 A8 N
       option2:输出图像大小选项,可选的有same(默认),full; @: X- B, w; c5 u
       option3:决定采用与filter2相同的相关滤波还是与conv2相同的卷积滤波5 U4 l: {- [4 g8 |' @3 \/ r3 X

  v$ y. q  ^/ P+ N+ j- m7 P9 h! j$ i

# s% B2 v; M" q3 C, T  F-------------------------------------最后总结----------------------------------------, \& p* ]. A; P, o5 m; _, [
1、  filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。
2、  imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。
8 K; F) ], H, a, Y! x( c' L( H

+ k+ K! X  J4 N  f/ d  I* F3 o* W1 z, b  \* M$ P! o0 u; U

" Q5 Q, I/ a& }; s2 G1 f+ [8 ^2 c2 k

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-5 02:45 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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