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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% 沿行插值
+ x5 K& R& v* a& }6 @2 JSd = cumsum(diff,1);  % 行叠加
3 [! |3 \* o7 W& J3 y% 沿列插值( T  q- `' B  d( c4 W& G8 ]* X. O) {6 J
Sd = cumsum(Sd,2);    % 列叠加
) h/ A1 [  h2 I  O$ m3 X3 t2 D& b为什么要进行叠加?: T4 K1 y5 o# B# |7 w
还有这一步也不是很明白,怎么就得到每个像素点的权值了
% `2 V& x; r+ k) o$ L            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);4 B: W, g5 H4 e  z8 Y1 R1 k2 V" l
  • TA的每日心情

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

    [LV.1]初来乍到

    3#
    发表于 2020-8-28 16:00 | 只看该作者
    分享这个源代码,应该有用
      G/ Q  B0 }2 b( `. G5 e7 t
    3 R% X2 P% d# c7 {, {function DeNimg = Non_Local_Means(Nimg,PSH,WSH,Sigma)
    8 Y' \; r) e$ s1 |% Non_Local_Means滤波器9 i+ C  W! G, ]/ _6 d* a
    %函数输入:
    # ~! U" n2 \% N%         Nimg:  输入的图像矩阵 + 带噪声的
    ( H$ }% e, k- a# N1 g%         PSH:  扩展窗尺寸大小
    ! s- ~; m/ N9 N" k/ Q%         WSH: 窗尺寸大小- r& Q6 k6 Y8 k' o
    %         Sigma:方差
      E: s5 `( `$ }# }2 K%函数输出:
    8 f1 X: }1 p) a( O2 d9 P: @%         DeNimg: 重构滤波图像: n' x% H  i& L2 l% S

    * G8 S- `  {  P6 _if ~isa(Nimg,'double')( Y+ P0 f5 f9 o9 q: f
        Nimg = double(Nimg)/255;
      g0 s, W' K2 Iend
    2 [* o! A$ E# L, G) U
    6 v& U# X, l  f: O% ^% 图像维数9 M7 t: u* [) f% |) g* B
    [Height,Width] = size(Nimg);
    5 c  p3 k$ m9 pu = zeros(Height,Width); % 初始化去噪图像矩阵
    - R9 V9 o% y" Q$ w8 ^* ~M = u; % 初始化权值矩阵
    + C7 B0 I- L9 F# cZ = M; % 初始化叠加权值 accumlated weights; O+ y% A0 B5 |5 e$ z3 A
    % 避免边界效应6 e' j5 r$ ~0 X5 M
    PP = padarray(Nimg,[PSH,PSH],'symmetric','both');
    - k* q" n4 f( s  LPW = padarray(Nimg,[WSH,WSH],'symmetric','both');: ]7 Q8 q; c9 [) y- w
    % padarray使用
    " N9 A$ ^; Y  I& F& D$ ?% A =
    ; s: E1 w, C6 S( T%      1     3     4; Q. T- f/ Y+ l4 L% E0 b
    %      2     3     4
    4 u% ~) l, X* Q) y. S5 [7 P# j9 T2 E5 p. R%      3     4     5& G7 ?+ \  G( G$ P
    % B = padarray(A, 2 * [1 1], 0, 'both')
    : r, }6 t; w  _%      0     0     0     0     0     0     0
    & r! x4 f% l) G  P" i- p3 D0 Y3 ^%      0     0     0     0     0     0     0! N& s  R+ L0 a' d. y% m0 [
    %      0     0     1     3     4     0     0
    $ x( u/ w, `" e/ G0 G+ @%      0     0     2     3     4     0     03 W4 K: k0 b) K. _4 E  a- x
    %      0     0     3     4     5     0     0
      `+ X5 _! r/ f%      0     0     0     0     0     0     0. k, X, G3 g4 T- m& ^2 P1 Y
    %      0     0     0     0     0     0     0
    , n/ x1 x/ a+ E/ x& p* M% 主循环& F: S! W" p6 u
    for dx = -WSH:WSH
    5 n6 k, M: ~4 q! G- {, @8 Q4 S+ C    for dy = -WSH:WSH
    ) w! d+ ?. A) P1 s        if dx ~= 0 || dy ~= 0
    3 {6 B; l1 U8 w$ G            Sd = integral_img(PP,dx,dy);  % 插值图像
      U! S- [% S+ Q' K! K            % 获取对应像素点的平方差矩阵* A) J3 X' D5 l1 F
                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);      
    % N' t' U5 z, w$ V; Y6 J/ }& k            % 计算每一个像素点的权值
    9 S  {7 b: K8 }8 t5 {            w = exp(-SDist/(2*Sigma^2));7 w* h% v2 x$ y1 D0 {9 C" H& M
                % 得到相应的噪声点& ^, V" r0 h0 V  I0 [8 B
                v = PW((WSH+1+dx)WSH+dx+Height),(WSH+1+dy)WSH+dy+Width));/ W1 Q6 \) K; v4 y1 a
                % 更新去噪图像矩阵
    . q) i: h( O2 m/ ^+ P            u = u+w.*v;$ F% L2 b* G3 O' X. M
                % 更新权值去噪图像矩阵
    " o  X1 [* K) s7 [) M# O, D( `            M = max(M,w);
    ; Y1 z' [+ @) W            % 更新叠加权值 accumlated weights
    / ]+ n9 N$ f- m# P$ t3 j8 a; v            Z = Z+w;" P) \6 J  a% \8 j, V$ W4 g
            end8 Q. D+ x4 D4 `% E0 f4 F: u8 L
        end, B. G# a. T& g
    end
    % k$ k9 x- f0 o9 r  q# [) g8 \% 重构图像        
    6 o$ b8 H4 w3 e& p5 x* T$ ]f = 1;, n! T) ]* h) A) o
    u = u+f*M.*Nimg;
    3 s8 b% A+ S( j8 h  tu = u./(Z+f*M);
    8 k0 Y5 K# i4 Z  j! ?. f- tDeNimg = u; % 重构去噪图像
    & d' h* p5 N( l3 l
    8 c( v$ @+ ]: Y. z* Lfunction Sd = integral_img(v,dx,dy)
    : L; {6 A1 `0 h0 e6 ]; J5 v1 `% 根据平方差,插值图像
    # `/ E3 Y8 ]# i, C% 变换计算:tx = vx+dx; ty = vy+dy
    + w8 `; @) \# M2 Dt = img_Shift(v,dx,dy);
    2 W3 p  [6 C0 r( Q" O% 平方差图像; \: X: g+ @. A/ L9 o
    diff = (v-t).^2;
    * J1 T) q+ e8 `* |) \+ L3 _0 {* ^- m' |) L% 沿行插值  U3 r2 g5 \1 D& o; K; c2 A
    Sd = cumsum(diff,1);  % 行叠加
    3 b8 g; H3 N5 Z! w# t% 沿列插值
    8 X& Y: e5 H3 O' @% XSd = cumsum(Sd,2);    % 列叠加6 X  W  Y9 L$ A( X* _+ F) T4 Q
    0 H1 n0 x, y: j' S( P% z2 t( {
    function t = img_Shift(v,dx,dy)5 F6 R1 Y0 z  Y! Q3 F% Q9 c. |, Q
    % 在xy坐标系下,进行图像变换操作
    # M3 t- K" B+ B$ |/ l3 kt = zeros(size(v));8 {+ b5 }' M2 E1 ]" X' L1 k9 v
    type = (dx>0)*2+(dy>0);, g' E4 A( R: ^8 j
    switch type
    8 x1 [5 X: v6 i6 G  v    case 0 % dx<0,dy<0: 向右下方移动
    7 g: G5 u9 y& u7 {# h+ t        t(-dx+1:end,-dy+1:end) = v(1:end+dx,1:end+dy);
    5 S3 l( z6 I  }4 ^    case 1 % dx<0,dy>0: 向左下方移动
    , ^* p: `6 H5 z9 F4 S% @$ T+ J2 g        t(-dx+1:end,1:end-dy) = v(1:end+dx,dy+1:end);# ?" b6 T& C6 R. K/ j
        case 2 % dx>0,dy<0: 向右上方移动6 `8 d; X4 \. n/ F/ I  [$ {
            t(1:end-dx,-dy+1:end) = v(dx+1:end,1:end+dy);
    ( @% f: T! T6 u; P- k- U    case 3 % dx>0,dy>0: 向左上方移动) D$ v  b2 ]1 ~8 i' P9 @
            t(1:end-dx,1:end-dy) = v(dx+1:end,dy+1:end);$ k1 d7 n" _8 z5 I- Y0 ^* g
    end# @" x, B& K) D; Y
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 14:39 , Processed in 0.218750 second(s), 24 queries , Gzip On.

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

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

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