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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% 沿行插值/ `. ]  E, I: m' N- X* e
Sd = cumsum(diff,1);  % 行叠加
3 J6 E& z( J; O3 e! P2 E% 沿列插值. m# U. D1 _* H
Sd = cumsum(Sd,2);    % 列叠加
5 Q2 L6 m1 F5 ~2 }, I4 y* x, F1 }为什么要进行叠加?8 ~3 Z" u& V* R2 F. |/ l& ?" h1 Y
还有这一步也不是很明白,怎么就得到每个像素点的权值了6 W+ Y* L/ @1 y' l" y
            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);
0 K/ A% r; }) u7 \& T2 S! v: B' r
  • TA的每日心情

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

    [LV.1]初来乍到

    3#
    发表于 2020-8-28 16:00 | 只看该作者
    分享这个源代码,应该有用
    : y1 ]1 A! }. o( p& i4 T' X0 F  q; Q
    function DeNimg = Non_Local_Means(Nimg,PSH,WSH,Sigma)
    , W+ X, W+ I1 ], ^, D5 ^3 D% Non_Local_Means滤波器; ]" P8 E. b8 q, M( l; O4 Y
    %函数输入: ' Q4 ^) t8 t# V6 K+ y: `
    %         Nimg:  输入的图像矩阵 + 带噪声的
    * X) I. I$ c' O5 G  _4 i5 i8 K& F%         PSH:  扩展窗尺寸大小) c3 g3 a( q; S, _. G' n( i
    %         WSH: 窗尺寸大小9 k* t1 J7 K) k: D+ U8 S8 ]
    %         Sigma:方差% B: p( k/ `- g; L4 l- H
    %函数输出: + @- y( g! k; W
    %         DeNimg: 重构滤波图像8 a7 U: T" [( }# O
    7 Y3 a- m4 F6 Q9 e
    if ~isa(Nimg,'double')
    3 Z) F, U% ^0 n# `' B1 d    Nimg = double(Nimg)/255;
    ; U" V  l4 z, J  M2 C" k# i4 Oend
    3 I. G4 S9 [9 ?3 I
    * B! ^; o$ w6 R5 G0 ?7 B% 图像维数, w9 f' J- x2 _; H2 _0 v' _* P: z
    [Height,Width] = size(Nimg);% y2 ~$ g* Y1 s# N5 F8 l, D0 X
    u = zeros(Height,Width); % 初始化去噪图像矩阵
    2 O! h5 O& `5 a: d6 M: x: E$ c. ?M = u; % 初始化权值矩阵
    7 l0 e" Z6 Z  |- u2 m( E2 dZ = M; % 初始化叠加权值 accumlated weights/ g. Y& E5 R+ E3 k) ~. P4 l
    % 避免边界效应& d# b' T' R0 D4 H% f+ y1 s4 R
    PP = padarray(Nimg,[PSH,PSH],'symmetric','both');# f- w6 H! n+ R: W& i+ U6 P
    PW = padarray(Nimg,[WSH,WSH],'symmetric','both');
    : b: X, {5 z4 t* r0 z% padarray使用
    5 h& Z0 F9 I) W/ R% U8 {' P  i& P% A =
    6 l) d3 I1 c' q%      1     3     41 F( v$ z5 r0 j2 n
    %      2     3     4/ k0 o+ E" i* X2 q# k4 C0 n
    %      3     4     5! D1 I- z3 |& e  N; J. o
    % B = padarray(A, 2 * [1 1], 0, 'both')+ Y* J/ F" a, s
    %      0     0     0     0     0     0     0
    ' \& ^; ], f1 J) i1 C%      0     0     0     0     0     0     02 n0 j2 Z( F7 y: W2 U( e) A/ a
    %      0     0     1     3     4     0     05 e: ?) q1 S) R! E- e9 _( Y
    %      0     0     2     3     4     0     0
    , Z, r+ v' L1 i9 g% W; A%      0     0     3     4     5     0     00 Z7 k1 ^9 R: q
    %      0     0     0     0     0     0     0& p  L% N* D% g1 d
    %      0     0     0     0     0     0     02 }' E) i6 l% \" p& r: j
    % 主循环
    - S4 P' m5 E" ~0 |0 a. ofor dx = -WSH:WSH9 r* ^. e) h! `6 i  l1 K. x+ D  t
        for dy = -WSH:WSH6 z8 x4 E$ t: m' e: V
            if dx ~= 0 || dy ~= 0
    $ A7 r. ?1 D% P" x0 s% w            Sd = integral_img(PP,dx,dy);  % 插值图像% X; F" H9 R  @! G; x! @
                % 获取对应像素点的平方差矩阵: W: Q$ X# a( W& T: N8 o" ]
                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);       3 M% ]7 k9 o  u  i! g
                % 计算每一个像素点的权值/ W1 b8 E0 ^3 O; Z) q
                w = exp(-SDist/(2*Sigma^2));  G' l& @6 t6 {6 @' n
                % 得到相应的噪声点& ~( {% a. W% M& C1 W( n8 @
                v = PW((WSH+1+dx)WSH+dx+Height),(WSH+1+dy)WSH+dy+Width));, W, N5 Y: Z% `5 i% X
                % 更新去噪图像矩阵, a# ]! [" M" h5 m* z: R$ x
                u = u+w.*v;4 S! J9 x0 t& Z9 `2 f1 Y
                % 更新权值去噪图像矩阵
    ) C# o5 Z# j: m            M = max(M,w);
    . A! ?4 _" T" G/ [8 w% J0 f            % 更新叠加权值 accumlated weights
    * J- p5 s8 D6 X+ Q9 N  P            Z = Z+w;
    + n% W$ z, a& n( C; a& N8 n        end  V+ ~" e/ I% }
        end, [& M" J1 O  |2 h' {, j. u
    end7 d  v3 b- _4 A
    % 重构图像        - x) ^7 n( G8 ^+ w9 D$ z) j% V* j4 Q
    f = 1;* x3 J6 N! H, z& v* Y/ K/ o
    u = u+f*M.*Nimg;! I9 e" \! Z. f4 o: ?
    u = u./(Z+f*M);
    2 [% r% o0 S+ ~& _9 J+ C0 gDeNimg = u; % 重构去噪图像
    % n4 c( d* m+ b- x% D' B
    + M4 |( S8 J& H8 {9 ^- e, ~3 qfunction Sd = integral_img(v,dx,dy); w+ ^$ W5 ~8 n: }) ~
    % 根据平方差,插值图像
    ; e+ \. D) l4 ?, q8 _% 变换计算:tx = vx+dx; ty = vy+dy
      H% F" S5 D# a- d0 i- Nt = img_Shift(v,dx,dy);# w; S1 E" K4 G( F, l6 {" h
    % 平方差图像
    + @7 y' J5 n& z8 L$ {' l0 _' j7 m# A% ldiff = (v-t).^2;2 t8 Y1 J9 W5 H/ c" Y' N
    % 沿行插值
    2 i" t) M6 g' d  P/ r- sSd = cumsum(diff,1);  % 行叠加
    * f! l0 A1 S2 P% 沿列插值
    $ F2 i7 W+ g1 A5 c4 b  HSd = cumsum(Sd,2);    % 列叠加
    ; X9 _+ J) s# o& C' _) Q0 r5 ]$ F, J3 b4 W7 ?4 {
    function t = img_Shift(v,dx,dy)# ?& E1 t* r2 \4 y/ B& f
    % 在xy坐标系下,进行图像变换操作
    3 L4 F) d3 t+ U" Z2 W5 ^t = zeros(size(v));
    " |' U/ }! T7 ]- Jtype = (dx>0)*2+(dy>0);
    8 B2 I3 Y8 l) N. Vswitch type
    0 y7 z0 W0 ~$ K8 j) J& a+ @8 m    case 0 % dx<0,dy<0: 向右下方移动3 r  D# h/ M) B9 S+ `, M
            t(-dx+1:end,-dy+1:end) = v(1:end+dx,1:end+dy);
    ! o6 _1 B! o3 k) o* D! E, H    case 1 % dx<0,dy>0: 向左下方移动  X" _; X& B4 g0 j; b: Y
            t(-dx+1:end,1:end-dy) = v(1:end+dx,dy+1:end);
    & W7 R% |" L) h* S6 n    case 2 % dx>0,dy<0: 向右上方移动
    % T  m% e  I! K+ ~5 X, t3 i* F        t(1:end-dx,-dy+1:end) = v(dx+1:end,1:end+dy);# @8 \2 p% y# R4 u' ~
        case 3 % dx>0,dy>0: 向左上方移动
    2 _6 A( C* v9 C        t(1:end-dx,1:end-dy) = v(dx+1:end,dy+1:end);2 `$ v- a& b$ }2 \0 g2 F: y+ i. M
    end# `# k& O% a! }: Q" n
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-6 15:39 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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