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

求助:关于非局部均值滤波程序的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-8-28 14:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
% 沿行插值$ U; ]3 j& G, T
Sd = cumsum(diff,1);  % 行叠加
  @& T# Z2 m9 I" u% 沿列插值  w' g  C$ T* t+ ]) F/ U" y1 i
Sd = cumsum(Sd,2);    % 列叠加0 l9 F8 [3 O8 x4 S: k' t
为什么要进行叠加?4 N- T8 |/ X  y1 O! r9 V
还有这一步也不是很明白,怎么就得到每个像素点的权值了
" {% D& V: C8 p            SqDist = Sd(PatchSizeHalf+1:end-PatchSizeHalf,PatchSizeHalf+1:end-PatchSizeHalf)+Sd(1:end-2*PatchSizeHalf,1:end-2*PatchSizeHalf)-Sd(1:end-2*PatchSizeHalf,PatchSizeHalf+1:end-PatchSizeHalf)-Sd(PatchSizeHalf+1:end-PatchSizeHalf,1:end-2*PatchSizeHalf);
# B$ j8 E1 f: f. j
  • TA的每日心情

    2019-11-20 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    3#
    发表于 2020-8-28 16:00 | 只看该作者
    分享这个源代码,应该有用
    ; K/ y0 H* [. t! l; ^7 t) e* o1 B" }
    function DeNimg = Non_Local_Means(Nimg,PSH,WSH,Sigma)
    / l. \% I$ u' R% Non_Local_Means滤波器
    + d$ [7 q% e" |%函数输入:
    * `& o- r: J! K! n* ~%         Nimg:  输入的图像矩阵 + 带噪声的
      l8 R: o4 d# Z# d%         PSH:  扩展窗尺寸大小# f9 B/ ?' o  B: q. O8 i$ u
    %         WSH: 窗尺寸大小
    6 P& G4 l/ B. S8 U  [. m& X%         Sigma:方差
    ( P$ N$ K  c' m- H6 G%函数输出:
    # K; U) H" e$ C%         DeNimg: 重构滤波图像, R1 a" C, h7 E
    . k4 @3 ~* n. V$ p( D9 v- D* U, Y
    if ~isa(Nimg,'double')
    ; v6 \; ~6 ^3 M3 }0 Q. }' t    Nimg = double(Nimg)/255;4 w. J+ H4 N+ _
    end
    9 l% b; M# ]: S: G% d
      H2 T8 N. \8 b% J" ~& t+ e% 图像维数
    ! ~+ H5 M+ V/ H% {% v[Height,Width] = size(Nimg);0 l4 Z: T- z) \( e8 H
    u = zeros(Height,Width); % 初始化去噪图像矩阵4 V8 T2 r4 G1 J" e: C0 T
    M = u; % 初始化权值矩阵( J9 u  H) }4 W5 H- E3 B/ ]
    Z = M; % 初始化叠加权值 accumlated weights
    + d# M0 |! A) C1 d3 V. X. M% 避免边界效应6 x5 A2 \7 B8 z. h
    PP = padarray(Nimg,[PSH,PSH],'symmetric','both');
    - s$ ^2 c# o2 A0 N  rPW = padarray(Nimg,[WSH,WSH],'symmetric','both');
      y2 e& Z/ [' l" ^9 G% padarray使用
    4 ?2 U4 Z' e5 D0 l$ y% A =
    : ]' d) X) {4 k7 D$ M# S%      1     3     4
    ! F! a% L& s1 E; P9 B  d%      2     3     42 g# g- F" h7 B& S( g) A
    %      3     4     5
    # r% q" G1 ^( {& o( u, ^% B = padarray(A, 2 * [1 1], 0, 'both')
    ) G  H: A  ?( z5 @& E; `%      0     0     0     0     0     0     0
    4 g, [9 X  S1 p- v2 w%      0     0     0     0     0     0     0
    4 g9 N& _  ?- f. p%      0     0     1     3     4     0     0
    - M& W' _! V" h& B* j%      0     0     2     3     4     0     0
    ) M( y/ f' m- o" A8 M" p%      0     0     3     4     5     0     06 B) ~- \! M" b8 E
    %      0     0     0     0     0     0     0
    ) D4 z6 \8 J& k# s, m6 u/ L) L%      0     0     0     0     0     0     0
    % }6 i" x/ J3 g/ H7 g2 Y3 F- C% 主循环( C  n/ [$ v0 Q) O
    for dx = -WSH:WSH
    3 }& G" o' \% [9 y+ D/ ~    for dy = -WSH:WSH$ N$ j6 e7 N5 o& T( X6 N/ M
            if dx ~= 0 || dy ~= 0
    6 n1 f; _9 w6 O1 W7 v* `            Sd = integral_img(PP,dx,dy);  % 插值图像# M) F! S; G3 _4 c/ C/ o; Q" u6 y  z: H- ]
                % 获取对应像素点的平方差矩阵$ Q" h0 Q, P3 U4 l
                SDist = Sd(PSH+1:end-PSH,PSH+1:end-PSH)+Sd(1:end-2*PSH,1:end-2*PSH)-Sd(1:end-2*PSH,PSH+1:end-PSH)-Sd(PSH+1:end-PSH,1:end-2*PSH);      
    ( q; I  t3 x/ B: d            % 计算每一个像素点的权值- m. s- i" P1 g9 H
                w = exp(-SDist/(2*Sigma^2));
    0 C# P0 s9 l* D( c' s            % 得到相应的噪声点) c  k5 Y) N- V" |8 i
                v = PW((WSH+1+dx)WSH+dx+Height),(WSH+1+dy)WSH+dy+Width));
    - g) W( k) T, A( l5 `            % 更新去噪图像矩阵
      B$ [) w, s2 t, `8 ?# A2 m, ^            u = u+w.*v;
    " q* k/ i1 S0 n$ [9 c6 {" i# E9 v            % 更新权值去噪图像矩阵8 Q. ~" t( d" A  Q* @
                M = max(M,w);7 _; |! P! C. b7 _! P
                % 更新叠加权值 accumlated weights
    ! s$ [6 @2 w) z% {4 }            Z = Z+w;9 E" E! D0 t4 {% y( m4 I- ^
            end
    ! [8 C6 O) H. ~- Z+ X% u) J    end
    3 S& ]' B; A$ T, p+ \end: V+ i) o/ G( z5 |
    % 重构图像        
    3 F  \' K5 q3 E" n( g# if = 1;
    4 R3 P" O: i6 Q5 W1 Mu = u+f*M.*Nimg;' ?) P" t5 Y7 U5 w
    u = u./(Z+f*M);* g7 u, Z2 u5 b7 K3 K
    DeNimg = u; % 重构去噪图像
    ' o5 k, G" C% M5 m
    6 G7 Y( S; s  vfunction Sd = integral_img(v,dx,dy)+ C. i* I. ?5 U, P$ R5 K
    % 根据平方差,插值图像8 y5 d2 t3 K8 d  A8 }" j
    % 变换计算:tx = vx+dx; ty = vy+dy5 t& f# `9 i+ ]
    t = img_Shift(v,dx,dy);
    - t% s/ `/ |. k: ~& r7 ^% 平方差图像
    9 h* J% r) A# S8 z9 v% [2 Ediff = (v-t).^2;7 |, u7 g4 w" @4 m' g! W+ L2 g
    % 沿行插值
    2 i$ M: F' Q* G) Z! rSd = cumsum(diff,1);  % 行叠加
    2 V8 h3 h* y) e( e7 Z. Y% 沿列插值
    & ^( z2 C9 Z7 m, Z- tSd = cumsum(Sd,2);    % 列叠加# s3 N$ s" e, O: }) Z7 B; \( U

    7 ?% {/ w# g& ^6 ~! E# ~9 Ffunction t = img_Shift(v,dx,dy)- Q5 G7 F2 A0 ?+ K# J
    % 在xy坐标系下,进行图像变换操作
    * }. z! m$ `0 P9 pt = zeros(size(v));; g5 c1 X' ^, r* K1 ]6 T
    type = (dx>0)*2+(dy>0);& x7 w  K. E& `) u" J4 z( B: c
    switch type; K% }2 B. X( S/ x2 j- C  J
        case 0 % dx<0,dy<0: 向右下方移动8 u2 q4 p( u& E
            t(-dx+1:end,-dy+1:end) = v(1:end+dx,1:end+dy);
    . ^7 [9 ~$ ~6 h/ h0 S, W    case 1 % dx<0,dy>0: 向左下方移动
    + t! c0 ]- x! X" s. c( r- i7 L        t(-dx+1:end,1:end-dy) = v(1:end+dx,dy+1:end);
    9 g6 b: v0 n$ \) E: L    case 2 % dx>0,dy<0: 向右上方移动
    * Z% T. J; u7 X' W        t(1:end-dx,-dy+1:end) = v(dx+1:end,1:end+dy);# j2 o0 B+ v# O3 R  Y0 \
        case 3 % dx>0,dy>0: 向左上方移动
    " w7 X6 q2 c. O$ A3 g) m        t(1:end-dx,1:end-dy) = v(dx+1:end,dy+1:end);0 o' d3 f1 _* X
    end
    : P# e: {7 G0 G
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-27 06:07 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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