資源簡介
A.Buwades等人提出的非局部均值濾波的快速實現方法
代碼片段和文件信息
function??[u_Woutput]=fast_NL(uNPlemda)
u=double(imread(u));
[mn]=size(u);
u2?=?padarray(u[N?N]‘symmetric‘);
output=zeros(mn);
u_N=zeros(mn);
kernel?=?make_kernel(P);
kernel?=?kernel?/?sum(sum(kernel));
i=1;
for?t=-N:N
????for?s=-N:N
?????????%t=-N;
?????????%s=-N;
?????????if(t==0?&&?s==0)?continue;end;
????????
????????u_N(1:m1:n)=u2(N+1:N+mN+1:N+n)-u2(N+1+t:N+t+mN+1+s:N+s+n);
????????u_N=u_N.*u_N;
????????v_N=exp(-(conv2(u_Nkernel‘same‘))/lemda^2);
????????
????????u_W(1:m1:ni)=v_N(1:m1:n);
????????%i
????????i=i+1;
????????output(1:m1:n)=output(1:m1:n)+v_N(1:m1:n).*u2(N+1+t:N+t+mN+1+s:N+s+n);
????end
end
%i
for?i=1:m
????for?j=1:n
????????u_Wmax(ij)=max(u_W(ij:));
????????u_Wsum(ij)=sum(u_W(ij:));
????end
end
%u_Wma(1:m1:n)=max(u_w(1:m1:n:))
output(1:m1:n)=output(1:m1:m)+u2(N+1:N+mN+1:N+n).*u_Wmax;
output=uint8(output./(u_Wsum+u_Wmax));
figure;
imshow(output);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function?[kernel]?=?make_kernel(f)
????????
????????
?
????kernel=zeros(2*f+12*f+1);
????for?d=1:f
????
????????value=?1?/?(2*d+1)^2?;
????
????????for?i=-d:d
????????????for?j=-d:d
????????????????kernel(f+1-if+1-j)=?kernel(f+1-if+1-j)?+?value?;
????????end
????end
end
kernel?=?kernel?./?f;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1325??2011-03-21?22:23??fast_NL.m
-----------?---------??----------?-----??----
?????????????????1325????????????????????1
評論
共有 條評論