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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% 沿行插值/ d1 J! C4 |& T6 d0 ]
Sd = cumsum(diff,1);  % 行叠加
+ u% j0 D! {9 G( s% 沿列插值
. G; X" U# C/ mSd = cumsum(Sd,2);    % 列叠加1 w! Z; D0 B' f0 g* }. S$ E+ r) w
为什么要进行叠加?
* w& [" Q/ o# J+ w, X还有这一步也不是很明白,怎么就得到每个像素点的权值了
+ `' l; @. S& \% l1 ]            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);' ?+ F! \" R# X$ d
  • TA的每日心情

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

    [LV.1]初来乍到

    3#
    发表于 2020-8-28 16:00 | 只看该作者
    分享这个源代码,应该有用3 j5 O3 z$ ?2 `$ B. ^0 `
    . x. d) q# n3 S( P# Z! m
    function DeNimg = Non_Local_Means(Nimg,PSH,WSH,Sigma)
    7 q" ]# Q/ N/ |: T( G' k# z% Non_Local_Means滤波器
    ; b5 S1 t* G7 W! c# R/ P' E. L( m%函数输入:
    % Y9 K# N$ o3 J+ A%         Nimg:  输入的图像矩阵 + 带噪声的
    1 U/ ?; N6 i: n6 x%         PSH:  扩展窗尺寸大小3 ~4 x6 d2 q! N' ]+ \
    %         WSH: 窗尺寸大小
    ' n' o8 o+ F% {( X%         Sigma:方差
    & o' l9 t2 j0 C( J%函数输出:
    # U; B  _. d- C* J/ `%         DeNimg: 重构滤波图像9 a7 C- `# N4 I6 v% f* i" H

    ' ]4 F: A8 [, W0 r- @if ~isa(Nimg,'double')5 t* W, `  L$ s3 T
        Nimg = double(Nimg)/255;7 g8 |4 R% M! E/ {0 r. B
    end1 R- N6 M3 T; O, b8 i
    7 y! B5 }+ I. ]1 Q  H
    % 图像维数
    1 E% A5 H  K! ?8 c' r) E% I[Height,Width] = size(Nimg);/ r' i4 v8 t" m
    u = zeros(Height,Width); % 初始化去噪图像矩阵
    3 J( o+ b/ I0 r. B, wM = u; % 初始化权值矩阵; u1 P$ ^  f% V% O- o  h6 w/ L
    Z = M; % 初始化叠加权值 accumlated weights
    ( L9 d: q4 ^" Y% J; _8 h& K% Q% 避免边界效应- c, n+ F# _- h# G
    PP = padarray(Nimg,[PSH,PSH],'symmetric','both');  t" U" p' u) Q$ t& T
    PW = padarray(Nimg,[WSH,WSH],'symmetric','both');$ s3 v$ P! z& t0 ]' j' n
    % padarray使用
    6 E$ _' w3 t0 m0 H# q" z3 V5 }% A =. j  e9 F$ q* `' p% i" `
    %      1     3     4. i& q  |0 q! Q7 b) g
    %      2     3     4; V* {/ U0 f! _7 d' k2 ]
    %      3     4     5
    # n5 F5 `4 J7 a2 k% B = padarray(A, 2 * [1 1], 0, 'both')% N  q6 t4 Y1 C" U$ w
    %      0     0     0     0     0     0     0
    $ n& J9 w3 O. ^4 z1 {%      0     0     0     0     0     0     0& l( P# [# g5 ~( C+ J
    %      0     0     1     3     4     0     0: C$ Y8 v- w& o
    %      0     0     2     3     4     0     0
    * ^% D! r( K& Q+ r%      0     0     3     4     5     0     0
    " O' ~1 K; M/ |%      0     0     0     0     0     0     0' }% Q; c7 `2 x. v; k
    %      0     0     0     0     0     0     0
    + n% a  J$ ?# f9 _% p& R3 l% 主循环( ^/ \: W9 l4 Y! E
    for dx = -WSH:WSH
    6 R: b( }1 ?% X  e    for dy = -WSH:WSH& D. y# _: u; c3 U& i
            if dx ~= 0 || dy ~= 09 J. n: ?# Z) W
                Sd = integral_img(PP,dx,dy);  % 插值图像
    5 [9 Z/ P1 G5 M" U/ E            % 获取对应像素点的平方差矩阵+ j, S" J5 Y% z% f2 v  @6 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);      
    + @; ]5 D4 z* N3 G            % 计算每一个像素点的权值9 _. a9 v* W8 k
                w = exp(-SDist/(2*Sigma^2));, n7 B5 q$ T' F5 e
                % 得到相应的噪声点/ m# |  U8 Q1 [7 N8 l
                v = PW((WSH+1+dx)WSH+dx+Height),(WSH+1+dy)WSH+dy+Width));
    4 P( O0 e( M, }# W" |6 X            % 更新去噪图像矩阵
    - P- C0 P+ X. u- p            u = u+w.*v;6 ^- F- B( Q+ z, P4 J
                % 更新权值去噪图像矩阵
    $ N( O2 F7 [; z7 ~            M = max(M,w);: r# F$ |; {/ o  ]
                % 更新叠加权值 accumlated weights
    : b4 l8 p8 m0 Q0 N! r            Z = Z+w;2 j0 h: ]: l7 B1 V* k. V
            end
    ( u9 i0 i) f* L" {0 i+ c    end  {  ]* K1 r  d8 Q8 H2 _  M
    end
    ) U& o; p, I9 k  c4 S% 重构图像        
    6 B+ S: V3 i3 y6 ~. if = 1;& ]( W  _% @* l( P3 U" S  w
    u = u+f*M.*Nimg;
    / F; _4 o; w. v# `% {& Uu = u./(Z+f*M);8 p( |6 t, ?0 a/ H6 x  v, z
    DeNimg = u; % 重构去噪图像
    7 D5 e: I9 p; }( K% D# o4 u; X5 g; Y  a
    function Sd = integral_img(v,dx,dy). M* y# G2 `4 Z) R4 @
    % 根据平方差,插值图像' W/ j# c! O& G) ~2 f
    % 变换计算:tx = vx+dx; ty = vy+dy
    ! c$ @" K& m/ \, ot = img_Shift(v,dx,dy);
    : t/ i" h/ ~& w3 `/ x& w4 w# f% 平方差图像9 Q" R; z2 v& F4 n
    diff = (v-t).^2;8 X0 E2 d6 R" W" S+ o
    % 沿行插值; t& m& }4 w2 T* m1 E1 @4 u9 g, Z
    Sd = cumsum(diff,1);  % 行叠加
    & H3 Y9 e  ^% D' o( x% 沿列插值
    / T. Z. o3 R; P* {6 RSd = cumsum(Sd,2);    % 列叠加
    $ ]1 m  v5 Y( x6 c* A$ K. T1 Y: ]  u: C& \5 K
    function t = img_Shift(v,dx,dy)
    1 O7 H+ N: C7 G+ d% 在xy坐标系下,进行图像变换操作5 y/ w0 {; T3 ^; Z
    t = zeros(size(v));" i# W( g/ U) ^% C7 S3 `
    type = (dx>0)*2+(dy>0);
    " `! Q, A! H7 e' t3 I$ {8 E8 oswitch type) i# U  b. {" r+ q( |
        case 0 % dx<0,dy<0: 向右下方移动! S& ]4 k' a2 Y! j
            t(-dx+1:end,-dy+1:end) = v(1:end+dx,1:end+dy);
    ; J& M' l* @4 Y% L9 b, {/ D    case 1 % dx<0,dy>0: 向左下方移动+ ~1 D5 l" U% c( J+ c/ ]
            t(-dx+1:end,1:end-dy) = v(1:end+dx,dy+1:end);
    + h4 Q1 ]% Y" B7 q: D# J# k! z    case 2 % dx>0,dy<0: 向右上方移动) E0 \: w" C$ D$ F. O" T
            t(1:end-dx,-dy+1:end) = v(dx+1:end,1:end+dy);
    # y1 a) z8 e6 J! e6 N  f* z    case 3 % dx>0,dy>0: 向左上方移动
    9 d/ p& o" H, g. n, ?  H: ~; y        t(1:end-dx,1:end-dy) = v(dx+1:end,dy+1:end);
    7 J+ |7 {- q/ qend
    . D0 ^% h5 Q  f) M4 d) p. Q) F
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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