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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% 沿行插值
# Q2 }5 ]8 X1 v6 b0 p/ D* b' lSd = cumsum(diff,1);  % 行叠加
7 X/ @# M  I: S- d) d/ O9 b4 ?% 沿列插值; R6 N+ N% Z. F$ g# H
Sd = cumsum(Sd,2);    % 列叠加; }5 T' C7 m/ d, D2 s) P% x$ \8 j
为什么要进行叠加?
8 L9 J! J6 E  Q还有这一步也不是很明白,怎么就得到每个像素点的权值了
( B2 i( z' \% s: R            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);
1 K. C9 u2 p! w5 T7 a9 T" x
  • TA的每日心情

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

    [LV.1]初来乍到

    3#
    发表于 2020-8-28 16:00 | 只看该作者
    分享这个源代码,应该有用9 I2 ~% C  ^# L2 L& q% Y0 a
    , P5 ?% j" W+ `, s
    function DeNimg = Non_Local_Means(Nimg,PSH,WSH,Sigma)
    * d9 \* m. z5 a. B3 D( l% Non_Local_Means滤波器
    ' E# K- Z$ P0 ~# _9 R) r%函数输入: 8 j0 f  Z3 j( S1 @
    %         Nimg:  输入的图像矩阵 + 带噪声的2 H) s+ A) l" \9 \# ~
    %         PSH:  扩展窗尺寸大小
    % H! r. |3 ^0 J6 b$ `; ?1 x% ]4 z%         WSH: 窗尺寸大小5 r7 H/ s; [$ ^: h7 a: K* u
    %         Sigma:方差
    0 `$ }7 d3 ~( L* S5 [%函数输出:
    & o+ p; T4 a% D%         DeNimg: 重构滤波图像4 F. m# H* T5 ^+ Z

    - c# ?  i; d0 x9 K: F: x, Wif ~isa(Nimg,'double')' n; v% T& q% g7 M1 u7 k
        Nimg = double(Nimg)/255;; z7 R1 {: L( x. \9 a/ ^% J
    end
    + ], v6 M6 u4 q4 B5 }0 n2 G2 `6 ^1 V$ Z6 n2 D: }1 q: V
    % 图像维数! {2 B) c& E1 m4 |
    [Height,Width] = size(Nimg);
    & u8 o9 ^' u( e/ q! ju = zeros(Height,Width); % 初始化去噪图像矩阵
    ! w$ `9 _1 `: f: rM = u; % 初始化权值矩阵  D. b& b* w; Y5 B1 x9 |) c
    Z = M; % 初始化叠加权值 accumlated weights
    6 J7 Q( V: a$ V% 避免边界效应
    5 @1 u% c; z/ k* E4 jPP = padarray(Nimg,[PSH,PSH],'symmetric','both');
    1 ^$ E7 R6 I% R) JPW = padarray(Nimg,[WSH,WSH],'symmetric','both');
    $ O. Q# A6 \5 z2 G; }% padarray使用
    4 [7 W; T4 u/ j3 \/ B3 i+ t( @% A =# O" b5 c; P7 p# f% h
    %      1     3     4
    ' y) w( m! F2 z! s/ p%      2     3     4
    ) n1 Q) d9 |/ Q& r$ H%      3     4     5
    1 q# Z9 G2 u% ?2 n* L3 a  |% B = padarray(A, 2 * [1 1], 0, 'both')
    1 o+ q( Y5 o3 `%      0     0     0     0     0     0     0
    8 J/ }# _8 C6 Z" G' a%      0     0     0     0     0     0     0
    - c" H* H# [# H, k. W6 {%      0     0     1     3     4     0     0! W% o5 R0 |& \) O) I( y( U
    %      0     0     2     3     4     0     0* b1 R3 j7 A! P- D: `% ]
    %      0     0     3     4     5     0     0
    % c* j' `5 ?* ]  g6 T: c%      0     0     0     0     0     0     0, V- E3 p  l# r4 W' T& A
    %      0     0     0     0     0     0     0
    & i) B. x1 a7 J+ m& I2 J) i, z% 主循环
    ; e/ g0 G8 l2 ^% Z' lfor dx = -WSH:WSH
    6 a7 Q: y- ^3 O2 Y5 {1 v* I8 S    for dy = -WSH:WSH+ \" a$ F" S. B; h/ y
            if dx ~= 0 || dy ~= 0
    + q: L: N8 b" a& S2 A$ [! I) e9 ]            Sd = integral_img(PP,dx,dy);  % 插值图像# J8 u' U! w3 ]0 j1 Z
                % 获取对应像素点的平方差矩阵
    , q5 l! W/ J" E& S% Y            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);       0 q( Y' V; i  c9 {, [6 I
                % 计算每一个像素点的权值
    ' u, A% h% _2 W/ \, C* h            w = exp(-SDist/(2*Sigma^2));
    3 H: j; _. j, v% F9 W8 e' E4 I8 g            % 得到相应的噪声点
      q% m& c( L& u7 |5 t! Q            v = PW((WSH+1+dx)WSH+dx+Height),(WSH+1+dy)WSH+dy+Width));
    7 K' x! C) l/ J; ~: N6 V  f            % 更新去噪图像矩阵
      V% H! K# D6 ~7 K            u = u+w.*v;
    9 c# r: f7 }8 E& {( t4 {1 q8 }4 C            % 更新权值去噪图像矩阵
    ; f% p4 @* |$ \: U* `            M = max(M,w);' c) n. n/ t$ U# d( E
                % 更新叠加权值 accumlated weights
    * _# h0 M) i. B, @) M+ j5 |# n            Z = Z+w;
    3 f# U3 p6 F1 y7 {+ m7 v- Y! q7 d+ F        end8 b; z4 C8 H- a
        end
    ( `9 e2 p0 I/ o+ h) n! oend
    8 r8 F8 h8 [6 Z" O' M1 k% 重构图像        
    + a6 H& U4 @- D+ l- Vf = 1;: T; p$ J3 v. F
    u = u+f*M.*Nimg;
    3 V! F) R% C9 x* H  O; Qu = u./(Z+f*M);/ T- H2 V& k' t0 [& x0 N' R; d
    DeNimg = u; % 重构去噪图像
    ) v7 C" {( N( }  e$ i1 x7 Z' N7 H5 {' F3 d3 ?+ K
    function Sd = integral_img(v,dx,dy)
    ' L* e/ _7 z, d% 根据平方差,插值图像
    $ x; z7 M! A! T# i! M# A% 变换计算:tx = vx+dx; ty = vy+dy
    & y% d9 E6 v. ^! O, F1 f4 l7 ct = img_Shift(v,dx,dy);: i# B0 R4 Y( q# h( D  j
    % 平方差图像# m, o( A$ O& f8 J1 X
    diff = (v-t).^2;! f, G% h8 K2 Z: L) M/ T
    % 沿行插值
    2 P8 X; i( g* t0 q  V8 \& g& JSd = cumsum(diff,1);  % 行叠加
    + X* J; \% q/ i% 沿列插值2 a5 k* k% U; j, x; X2 v
    Sd = cumsum(Sd,2);    % 列叠加. K+ z% x: }9 i* v, Q& d3 l
    ( m$ d- z- X: p7 r
    function t = img_Shift(v,dx,dy)8 D+ M" d0 e. s6 @
    % 在xy坐标系下,进行图像变换操作  @( F) H# F# `3 v8 ?: c
    t = zeros(size(v));
    5 G+ D8 J4 r/ C& t* stype = (dx>0)*2+(dy>0);9 m$ _) o/ D3 I8 }6 j9 z4 f
    switch type
    6 ?# h' c" n7 Z2 E* x4 p$ |( y    case 0 % dx<0,dy<0: 向右下方移动4 t6 h/ f2 L* {2 _7 U/ W) M
            t(-dx+1:end,-dy+1:end) = v(1:end+dx,1:end+dy);
    8 G0 C1 R! M# {2 O    case 1 % dx<0,dy>0: 向左下方移动0 P* X5 W9 I4 A- m0 U; u4 X% G! m
            t(-dx+1:end,1:end-dy) = v(1:end+dx,dy+1:end);* w) o) J2 i' r$ {- D/ W
        case 2 % dx>0,dy<0: 向右上方移动, r# X: i) E3 ]7 F. e% v1 ]1 @
            t(1:end-dx,-dy+1:end) = v(dx+1:end,1:end+dy);
    : \  r/ z$ K* ^$ x% v& X7 f  Y    case 3 % dx>0,dy>0: 向左上方移动7 D2 B! n$ Z+ S) o( H
            t(1:end-dx,1:end-dy) = v(dx+1:end,dy+1:end);6 G: P$ Y6 w# E7 u% Q! q- G
    end% c" K1 W7 a* S- j
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-3 23:25 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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