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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% 沿行插值
5 v: Y# i! @& T" ?Sd = cumsum(diff,1);  % 行叠加9 \1 n% y+ b- @+ F: F" z
% 沿列插值
6 P/ p( D: ?& I3 s% p! y5 zSd = cumsum(Sd,2);    % 列叠加
) D  w/ j5 L& u6 O为什么要进行叠加?
4 b* W' c  C/ {. {还有这一步也不是很明白,怎么就得到每个像素点的权值了
" [* D; h' Y$ j# }5 D. |            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);
) Z6 A% k  z( @6 b+ t$ f
  • TA的每日心情

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

    [LV.1]初来乍到

    3#
    发表于 2020-8-28 16:00 | 只看该作者
    分享这个源代码,应该有用
    ( M  f0 K  A8 F2 ^# R8 u
    5 O8 Q6 {8 m' e+ u' xfunction DeNimg = Non_Local_Means(Nimg,PSH,WSH,Sigma)% ?8 b0 A' u1 w
    % Non_Local_Means滤波器
    $ J$ J+ L3 {' g% w% J; p%函数输入: / q; g' v5 j' {
    %         Nimg:  输入的图像矩阵 + 带噪声的
    ) G  y; m$ ?% C9 a3 J%         PSH:  扩展窗尺寸大小
    2 _( |5 a/ U' }- `* M%         WSH: 窗尺寸大小
    7 {0 ^4 `" S9 w%         Sigma:方差
    * b' x# @& y0 E. g+ k% Z$ o%函数输出:
    " h- L5 W9 ~/ V# m8 }3 B, v%         DeNimg: 重构滤波图像6 e: z7 Y0 X1 `; X, H: h. G
    : x! F9 R# h) K
    if ~isa(Nimg,'double')* \& a0 e, g& R* \
        Nimg = double(Nimg)/255;
    ' ]* U' E" [2 Mend9 z& j2 W0 X5 P" c' D* ?$ H: k5 e

    * z4 L$ ?( e0 o, `/ N% 图像维数0 {. }9 Q& f+ ]9 r
    [Height,Width] = size(Nimg);
    7 B1 [, O: I$ Y4 @7 a; n+ Eu = zeros(Height,Width); % 初始化去噪图像矩阵
    2 n; J. o* p& _- ?) vM = u; % 初始化权值矩阵
    $ \  v, X5 @' {  NZ = M; % 初始化叠加权值 accumlated weights# X/ n0 {- z1 d4 r, @, {
    % 避免边界效应3 S+ ~5 o* Z7 z3 a! `+ q: V- ^
    PP = padarray(Nimg,[PSH,PSH],'symmetric','both');
    $ A$ T" F4 R$ z# @0 g3 Q* ~( oPW = padarray(Nimg,[WSH,WSH],'symmetric','both');! t# A& K& v' v# B
    % padarray使用" w! e) L, c6 ^5 R
    % A =
    # e0 v0 \0 J' Y%      1     3     4. u) X5 D1 w/ Q; i
    %      2     3     4
    . h& Q. o8 k# V. J; N+ T%      3     4     59 i! u! ~% _7 Z; M9 `
    % B = padarray(A, 2 * [1 1], 0, 'both')# T* b/ K) O8 f! z7 I, x, w
    %      0     0     0     0     0     0     0$ G6 E( p- Y; T% g
    %      0     0     0     0     0     0     0
    - [( M' s% c8 w" ~  d7 @%      0     0     1     3     4     0     09 n' j! b9 M7 p& f. F
    %      0     0     2     3     4     0     0
    4 B/ z5 k5 C4 Z( P4 Q, l1 s%      0     0     3     4     5     0     0
    % _+ t0 X2 L0 h  N%      0     0     0     0     0     0     0
    / j$ c( I, n+ M3 P$ g9 x) l%      0     0     0     0     0     0     0
    9 c3 W7 ^" [2 g. G* [- p, F2 B% 主循环
    ! F9 d  b" E/ S7 o2 {3 Wfor dx = -WSH:WSH0 h( j5 D; ^! e5 M
        for dy = -WSH:WSH
    0 t/ c: j4 T/ y        if dx ~= 0 || dy ~= 0, }6 l' G- t8 M' t0 D7 D! i+ Y
                Sd = integral_img(PP,dx,dy);  % 插值图像
    6 G+ e* E- V3 i  |            % 获取对应像素点的平方差矩阵3 H4 e- [' }# _" Z$ D
                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);       ! B% }7 R) D$ v2 u% Z
                % 计算每一个像素点的权值, l# O' n; q; i/ q3 O
                w = exp(-SDist/(2*Sigma^2));& A( ]8 s( d% p6 k' S) ]4 x
                % 得到相应的噪声点
    " z' i# h- r  J& A            v = PW((WSH+1+dx)WSH+dx+Height),(WSH+1+dy)WSH+dy+Width));
    , X9 s+ _: D+ ^7 ?* Y* f            % 更新去噪图像矩阵
    ( ~2 n! u4 U! @: R            u = u+w.*v;( {+ j+ ]$ O7 ~( F& w& X
                % 更新权值去噪图像矩阵9 E# Q& O. n# K) i3 Q9 R" L2 U9 j
                M = max(M,w);
    , k2 s& D4 f4 \            % 更新叠加权值 accumlated weights5 g4 V; ?& y& `5 q# K
                Z = Z+w;5 C/ Y1 d1 E; `1 w8 R( u
            end
    : u) g, d- I3 @4 M" b    end
    9 M* E8 Z( S: Z: u, f9 y+ x: i2 nend, P; ?1 T: [. ?* o; ?/ M4 ]; ^
    % 重构图像        ' r; y. v9 _/ e
    f = 1;' p$ y8 K" w5 ~  u$ r, p
    u = u+f*M.*Nimg;
    0 j; q0 t' u  c$ K7 wu = u./(Z+f*M);
    9 I2 N0 H* k( y  |DeNimg = u; % 重构去噪图像
    8 k" E' [2 t  K- L6 Q. O9 }; C3 V8 s
    function Sd = integral_img(v,dx,dy)
    / A# A  o: p8 o, f% 根据平方差,插值图像& ]# @4 Z: ^1 m+ X% S0 O' q$ _$ s
    % 变换计算:tx = vx+dx; ty = vy+dy
    ( v& d+ m2 L' et = img_Shift(v,dx,dy);
    & B' b# s; n. `9 B+ d. U% 平方差图像
    0 _$ e& N& d- P0 s$ Pdiff = (v-t).^2;
    , M5 ~1 |+ F+ V  e, q! u- O' E6 X% 沿行插值
    : t' o7 X) j# R: g$ d  H) w0 CSd = cumsum(diff,1);  % 行叠加
    # u& B" X% v" N1 I" ^1 w7 l% 沿列插值" ?2 _4 C$ b- N" v
    Sd = cumsum(Sd,2);    % 列叠加" \+ l0 t8 j; X1 G; ^8 U
    ; V3 e4 W3 n* A3 l8 n
    function t = img_Shift(v,dx,dy)  |: X1 X, |  l1 Q# g, }
    % 在xy坐标系下,进行图像变换操作) t& q2 o8 R2 @- m* H
    t = zeros(size(v));% O8 ~, P' Q+ F
    type = (dx>0)*2+(dy>0);" a8 M  X9 x3 E- K
    switch type% l4 I* x" \' e3 V2 f, Z/ E
        case 0 % dx<0,dy<0: 向右下方移动
    7 Z$ R1 D( C) [2 s* H        t(-dx+1:end,-dy+1:end) = v(1:end+dx,1:end+dy);
    . m3 G" P$ a  Z7 ]$ R    case 1 % dx<0,dy>0: 向左下方移动2 K. I5 O6 c) Q1 B% z
            t(-dx+1:end,1:end-dy) = v(1:end+dx,dy+1:end);
    / d% Q5 c5 b2 s    case 2 % dx>0,dy<0: 向右上方移动7 i( }- ~4 L- ?$ L' h7 E1 B
            t(1:end-dx,-dy+1:end) = v(dx+1:end,1:end+dy);6 M, q9 Y( B+ J9 I/ e
        case 3 % dx>0,dy>0: 向左上方移动; G: h; q% X0 \( \% K* T( i
            t(1:end-dx,1:end-dy) = v(dx+1:end,dy+1:end);7 E+ W/ h3 ?, E% t6 f5 m  P
    end( L* p. H0 P, S# @
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 19:32 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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