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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% 沿行插值: U$ m  d' u+ p5 w4 r: e0 |
Sd = cumsum(diff,1);  % 行叠加$ a* F6 ]$ G& Y3 |
% 沿列插值
* P  L* e8 ~! a9 ?4 ^& T1 rSd = cumsum(Sd,2);    % 列叠加
8 Y, u7 [- X9 H7 p6 |& K为什么要进行叠加?
% ~( O& E+ j. R8 a, h" ?' B还有这一步也不是很明白,怎么就得到每个像素点的权值了
) `2 n5 W! g) B/ m. b6 G/ T0 g% c            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);
) \, ~9 {/ p/ u. Q5 G- v6 _
  • TA的每日心情

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

    [LV.1]初来乍到

    3#
    发表于 2020-8-28 16:00 | 只看该作者
    分享这个源代码,应该有用% \  W8 i5 F3 I' x" w
    9 m6 `+ ?  E) _. j; I- Z8 n
    function DeNimg = Non_Local_Means(Nimg,PSH,WSH,Sigma)+ E4 y* J8 _: a0 A1 Q2 Y* h  W1 T% k
    % Non_Local_Means滤波器
    . k( g  n* Y% `& I& f%函数输入:
    9 B( \% y" ]/ i: s%         Nimg:  输入的图像矩阵 + 带噪声的
    9 Y; ^/ [( X" R. k/ F5 [: X/ c%         PSH:  扩展窗尺寸大小
    4 z9 m' a+ l- V$ `%         WSH: 窗尺寸大小; F& F6 C5 O5 n
    %         Sigma:方差
    & }* Z5 r3 P6 |) E%函数输出:
    % r8 N5 f' D2 Y%         DeNimg: 重构滤波图像) C1 r- K( [7 ^3 }# Y5 P
    0 ?4 A% f/ e; H
    if ~isa(Nimg,'double')
    ( n$ @- x1 q  i! [  a6 R5 y    Nimg = double(Nimg)/255;
    % l- R2 t) Z8 d7 _end
    * ~1 A6 k' X* l& I8 [6 p1 o. q+ B+ n1 ^. \
    % 图像维数/ K" w, S5 m7 x/ e
    [Height,Width] = size(Nimg);/ o$ P& t7 S, H% s+ Z! l; B; I
    u = zeros(Height,Width); % 初始化去噪图像矩阵
    / b8 s7 B; \) a" X9 O0 D; I) v$ BM = u; % 初始化权值矩阵& ~5 Y, D! N8 A$ R! E! ]9 M
    Z = M; % 初始化叠加权值 accumlated weights+ `) [# ^/ ^1 O
    % 避免边界效应
    8 `! E9 J- f7 _  w7 o/ {1 _PP = padarray(Nimg,[PSH,PSH],'symmetric','both');: `( W, x  I5 x. h# k; C8 b
    PW = padarray(Nimg,[WSH,WSH],'symmetric','both');
    # a) O9 M! w# X& b% i% padarray使用
    6 B& j  Y2 R( ?/ V) t% A =  P; R0 m* R) k" G
    %      1     3     4* T) U: ~+ C5 c8 ^  v
    %      2     3     4
    * W% W& k4 K3 V5 J( ]: A& e; x2 B- w%      3     4     50 g$ Z1 G; t9 F6 r& I) D
    % B = padarray(A, 2 * [1 1], 0, 'both')6 c' I# R2 I, i% C) k
    %      0     0     0     0     0     0     0
    2 B! z( c4 r$ k3 i%      0     0     0     0     0     0     0
    8 ^0 B/ p  ^' Z* s9 r8 q%      0     0     1     3     4     0     0& H* t% G7 h. ]& _+ ?) h9 a. h3 @& p
    %      0     0     2     3     4     0     09 m! n5 Z4 ]) o% v4 V
    %      0     0     3     4     5     0     0& ?) U  X5 a$ Y2 d3 d* f
    %      0     0     0     0     0     0     0
    % F5 H" F! s- G7 [! H. T%      0     0     0     0     0     0     0: R& y; `) |. e# d+ x& z$ a) C
    % 主循环
    : f7 I+ @0 d3 C1 M$ k' b4 |for dx = -WSH:WSH
    5 V1 I8 \$ M  |/ @$ [% v    for dy = -WSH:WSH
    + \7 S/ U  y# w7 p6 Q" ~        if dx ~= 0 || dy ~= 0" E! B7 @, U: g5 z1 ~6 z0 J; u
                Sd = integral_img(PP,dx,dy);  % 插值图像
    7 N, N; e3 T3 Q! K, R- L            % 获取对应像素点的平方差矩阵0 H8 W& G: `; g; [6 x* d. 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);      
    . P: S7 J4 N# h# k0 J( Z+ m4 \' |            % 计算每一个像素点的权值+ {( |* x" ^7 z$ ^* ^
                w = exp(-SDist/(2*Sigma^2));$ Q$ i: M5 l5 h$ ]9 P1 q8 f+ `; Y. Z" @( ~6 q
                % 得到相应的噪声点4 z6 Q$ E3 f# G9 g$ E$ G5 B
                v = PW((WSH+1+dx)WSH+dx+Height),(WSH+1+dy)WSH+dy+Width));4 f5 _/ {# X3 b+ K* W9 i
                % 更新去噪图像矩阵6 L. {4 L5 E% P3 X
                u = u+w.*v;
    ( s6 h3 ^7 P  m2 }  a4 K            % 更新权值去噪图像矩阵
    % J- D8 a" O0 [+ ~; Q$ O            M = max(M,w);
    % B# T: p" z2 l" t* q5 O: k( F6 A            % 更新叠加权值 accumlated weights) a' N! M. ]6 {( C7 i1 Y" r6 C0 F
                Z = Z+w;
    6 ^8 v$ L% ]5 ^. A! [+ U; W) ~        end3 _1 _1 f& f/ t* w9 n& |
        end
    - P3 p/ P9 g! `$ L& kend
    4 w& a; F6 p$ a1 O: c$ Z% 重构图像        
    & n: @* u: [0 ?8 T. D2 Df = 1;
    & o3 K/ v8 {1 S- @8 Gu = u+f*M.*Nimg;
    " p! @) ]; u1 M+ Vu = u./(Z+f*M);
    + ~; a. v1 A1 b$ A+ v, U8 r+ jDeNimg = u; % 重构去噪图像
    7 d' r" Z: K: {6 l2 ?: W, B' x/ }  \6 J" h
    function Sd = integral_img(v,dx,dy)8 {' P! t5 I5 Y
    % 根据平方差,插值图像
    : Z+ B! M8 \: k9 Z  i% 变换计算:tx = vx+dx; ty = vy+dy: V, h: _7 I: x8 o" l
    t = img_Shift(v,dx,dy);: @# Y9 ^% T) }/ k7 P: s
    % 平方差图像! E" V* {5 E* j6 ]& J- f
    diff = (v-t).^2;
    7 B, @6 \4 O. _  x: Q; Y8 O% 沿行插值
    ( y5 T$ U! `$ d/ j. XSd = cumsum(diff,1);  % 行叠加
    . i2 c; B! r& a9 z6 u8 E% 沿列插值/ x( |0 e) R- W5 T3 T* |- V  J
    Sd = cumsum(Sd,2);    % 列叠加+ M1 \0 x, f8 {# ~
    $ A4 E7 i+ u% P
    function t = img_Shift(v,dx,dy). n$ m. F. X" A  o" W
    % 在xy坐标系下,进行图像变换操作
    ) X* j- N2 u" ~t = zeros(size(v));
    + m) X! e; P4 E* Ytype = (dx>0)*2+(dy>0);
    2 M* X2 @: c  ~) G0 ~switch type% t* K) f* q" H6 ^
        case 0 % dx<0,dy<0: 向右下方移动7 u1 w5 N7 m# s: {) e$ h5 X& F
            t(-dx+1:end,-dy+1:end) = v(1:end+dx,1:end+dy);
    * U# \8 n/ w' A7 y" s! B    case 1 % dx<0,dy>0: 向左下方移动# ~; v$ M; x4 L$ X5 x
            t(-dx+1:end,1:end-dy) = v(1:end+dx,dy+1:end);! }; l6 F! }) J: x  O/ r
        case 2 % dx>0,dy<0: 向右上方移动; I+ p+ i. a. t& h' ^
            t(1:end-dx,-dy+1:end) = v(dx+1:end,1:end+dy);
    7 a9 \8 a# _# W5 z) N    case 3 % dx>0,dy>0: 向左上方移动
    0 N5 \2 k; N" \: Y" ^. f, r* H        t(1:end-dx,1:end-dy) = v(dx+1:end,dy+1:end);" m8 l' ~$ i% t- s1 y% C
    end9 @+ E3 O% ]. a) M4 p/ L
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-27 21:29 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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