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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% 沿行插值+ R+ Y2 m1 D- r- d. m9 k* ]
Sd = cumsum(diff,1);  % 行叠加
! \2 y0 F! g. D+ ^% 沿列插值
: l0 w$ _7 I- W6 bSd = cumsum(Sd,2);    % 列叠加
# |: s- B0 T! s( g" n+ t4 J, s! m为什么要进行叠加?
5 z' U; c$ R7 w2 T/ ^还有这一步也不是很明白,怎么就得到每个像素点的权值了
9 r$ |: U& K; p8 F8 T8 Z. h            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);7 B5 p$ o% x1 n1 \9 a3 l
  • TA的每日心情

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

    [LV.1]初来乍到

    3#
    发表于 2020-8-28 16:00 | 只看该作者
    分享这个源代码,应该有用
    8 V) g: o9 F: E1 l$ @
    , ^! A6 q- |  T& F3 @2 [% O, R% ?function DeNimg = Non_Local_Means(Nimg,PSH,WSH,Sigma)
    4 g' ^, C# l+ ^" m/ l; g: c% N' q% Non_Local_Means滤波器
    9 x" C0 o. M4 d3 e0 n%函数输入:
    " C4 n) f# c; K) t9 R%         Nimg:  输入的图像矩阵 + 带噪声的& n- b7 f6 L& b: H3 C1 V, {& R
    %         PSH:  扩展窗尺寸大小. p* _5 v! r/ C5 a3 S# {- G: D" c& P
    %         WSH: 窗尺寸大小
    % s! s9 I# F& h8 ]%         Sigma:方差
    ; b& R/ X, Q& i%函数输出:
    3 q: t" ]7 X% v; D) q! J" F%         DeNimg: 重构滤波图像- i3 i4 N5 M5 R6 {
    + `' }$ Q" U& r1 M6 d" w: |. u* n7 X
    if ~isa(Nimg,'double')
    ; {" o" V1 g' g3 Q5 J. B* S    Nimg = double(Nimg)/255;
    / T+ u. p' q4 {! zend- h3 ~# Q. ~% o; ~# L  g1 `

    " F* ?% x4 c  `% v% 图像维数; c1 l6 x8 s/ `( }( i& T
    [Height,Width] = size(Nimg);5 I9 J9 S# |; T) ~4 R7 `
    u = zeros(Height,Width); % 初始化去噪图像矩阵
    % n3 @( v) `7 F" }# IM = u; % 初始化权值矩阵5 r2 F3 b- {2 M& f+ k1 x9 r2 e
    Z = M; % 初始化叠加权值 accumlated weights) X9 f7 [& ~3 T- O+ ]. I: J3 |/ [# s
    % 避免边界效应
    $ I- ?! e& @4 T( j2 g# m) t: d) s! c: ~$ mPP = padarray(Nimg,[PSH,PSH],'symmetric','both');1 u  E$ z8 A1 p: Z# A3 j
    PW = padarray(Nimg,[WSH,WSH],'symmetric','both');  M; A# _, Z; w
    % padarray使用- ~1 S2 T+ {& o- f- T4 R" H
    % A =
    ' u% ^) T/ G3 N; O) Z' z%      1     3     4
    + N% S+ Y, b& b/ U%      2     3     4: H  g) _2 l" t9 ]
    %      3     4     5+ Y+ h1 a" y/ z' u, n" v7 g
    % B = padarray(A, 2 * [1 1], 0, 'both')
    6 U9 i/ ~1 c* g8 Q! p& _0 s. p" R%      0     0     0     0     0     0     0
    / `9 H' ]0 f" w3 n3 R! l%      0     0     0     0     0     0     0
    : M( o/ t. J- r2 ~4 u- r' c) ]1 B%      0     0     1     3     4     0     0
    0 h! o1 k! F) [# H%      0     0     2     3     4     0     0* h; }: \* b% y" {7 j& E1 `  V# K
    %      0     0     3     4     5     0     0
    2 r- A6 M4 G7 }- o) P3 {9 B%      0     0     0     0     0     0     0
    / b' i# b, Y7 D; w3 H5 V! \%      0     0     0     0     0     0     0' T/ g2 M, C5 a; @
    % 主循环  J( ]3 [/ K: n% V/ C& J9 B9 j
    for dx = -WSH:WSH2 `- i+ z* u( {+ |' }
        for dy = -WSH:WSH; s$ E/ X' z3 s1 q) \5 v
            if dx ~= 0 || dy ~= 0
    0 B# ^1 i; M8 O$ \3 R# H            Sd = integral_img(PP,dx,dy);  % 插值图像; F3 r& e0 E. U' {) D& \6 c3 \1 W* R
                % 获取对应像素点的平方差矩阵
    5 v8 `* Q4 u& a/ {$ R            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);       9 L# [, i& x5 S9 q5 L7 H% H& _
                % 计算每一个像素点的权值
    : m' B" n4 Q* U- x            w = exp(-SDist/(2*Sigma^2));
    / z; Q+ {9 m5 l2 r. ^  N            % 得到相应的噪声点
    # y5 ~% l" E3 b            v = PW((WSH+1+dx)WSH+dx+Height),(WSH+1+dy)WSH+dy+Width));
    - u4 y/ L6 d5 W4 f9 ?1 Q% o# e            % 更新去噪图像矩阵
    . w# L) k) \/ z  M, I# N6 W* V3 y            u = u+w.*v;
    0 W, }# _/ I+ E; r$ X            % 更新权值去噪图像矩阵" o6 c* t* x1 d/ a
                M = max(M,w);. ^, b- z+ Z. D! ~5 d1 g" Z" q
                % 更新叠加权值 accumlated weights! y- H6 `0 q; X
                Z = Z+w;+ B: Z0 s0 e% x9 f
            end' A( J. p8 }$ X2 }5 i
        end
    & ?. u2 f$ ]. _: _) E4 A% \end
    1 K) T6 m; X, J$ E5 r0 k5 e3 D) f& o% 重构图像        
    ; C3 q1 [6 M9 Tf = 1;& E4 }' v# D% {/ w9 [- a
    u = u+f*M.*Nimg;7 U6 T9 y% V7 ?/ w- C( r" U
    u = u./(Z+f*M);+ n+ f" k0 ^" u* C+ U
    DeNimg = u; % 重构去噪图像( F2 W' p% p7 f! F% D

    ; d( S4 W) R* J0 b9 F+ [function Sd = integral_img(v,dx,dy)# p5 F2 ~! Z. N+ b8 Q! B$ `7 J
    % 根据平方差,插值图像
    1 V/ J5 {0 T$ |7 M. G' T5 f* m% 变换计算:tx = vx+dx; ty = vy+dy
    # o# B2 H+ G; a0 i9 Yt = img_Shift(v,dx,dy);/ u* }: V# ~4 g0 E# ]
    % 平方差图像
    ' \- J1 J4 u" t% N* v, R& s. m! \diff = (v-t).^2;1 Z/ ^2 H0 H  P! y" _# E
    % 沿行插值
    + e  W% z4 u9 ?- \" Y5 QSd = cumsum(diff,1);  % 行叠加" s' j# x* O# D# b* V: l6 s
    % 沿列插值
    ! J3 ~* V) N) O5 \& ESd = cumsum(Sd,2);    % 列叠加
    9 ^1 c, l% W0 d$ @6 D+ `
    ! J+ C( j0 f* _) m( Wfunction t = img_Shift(v,dx,dy)8 l0 e+ f, w2 q$ ?& g' R
    % 在xy坐标系下,进行图像变换操作3 ^- I" s5 p9 _4 s
    t = zeros(size(v));/ H) y9 B3 C( p$ ]( q
    type = (dx>0)*2+(dy>0);) m" S; T, V# u3 d
    switch type
    , |5 V) g3 T5 ~9 S% h0 P7 h9 q" H    case 0 % dx<0,dy<0: 向右下方移动' K. ?7 S* z! M  o
            t(-dx+1:end,-dy+1:end) = v(1:end+dx,1:end+dy);
    1 M' z8 ~5 E, H8 `. k    case 1 % dx<0,dy>0: 向左下方移动
    + k8 `, S" k. o- K3 _        t(-dx+1:end,1:end-dy) = v(1:end+dx,dy+1:end);
    , a; M9 U) z0 T3 K+ B    case 2 % dx>0,dy<0: 向右上方移动
    4 t" s7 i, u$ U. p; e, a        t(1:end-dx,-dy+1:end) = v(dx+1:end,1:end+dy);
    8 s; p5 K2 Q0 A7 \( f' @    case 3 % dx>0,dy>0: 向左上方移动( r4 N, N( L, f/ F5 y2 S  I
            t(1:end-dx,1:end-dy) = v(dx+1:end,dy+1:end);8 D. h) T$ \  ?4 ^/ q( E
    end$ }$ O' T6 P9 p9 I
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-24 01:17 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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