基于加权最小二乘法的保边缘平滑滤波器(WLS),matlab程序自己编写,更直观

来源:互联网 发布:怎样学好plc编程 编辑:程序博客网 时间:2024/05/19 01:29
<span style="font-size:18px;">clear all;g = double(imread('../images/barbara.png'))/255.0;lambda=1.0;alpha=1.2;[m, n]=size(g);smallNum = 0.0001;A_x = diff(log(g+eps), 1, 2); A_x = 1./(abs(A_x).^alpha + smallNum);A_x = padarray(A_x, [0 1], 'post');A_x = A_x(:);A_x=sparse(1:1:m*n,1:1:m*n,A_x(1:1:m*n)',m*n,m*n);A_y = diff(log(g+eps), 1, 1);A_y = 1./(abs(A_y).^alpha + smallNum);A_y = padarray(A_y, [1 0], 'post');A_y = A_y(:);A_y=sparse(1:1:m*n,1:1:m*n,A_y(1:1:m*n)',m*n,m*n);D_x=sparse([1:1:m*n,1:1:m*n-m],[1:1:m*n,m+1:1:m*n],[-ones(1,m*n),ones(1,m*n-m)],m*n,m*n);D_y=sparse([1:1:m*n,2:1:m*n],[1:1:m*n,1:1:m*n-1],[-ones(1,m*n),ones(1,m*n-1)],m*n,m*n);Lg=D_x'*A_x*D_x+D_y'*A_y*D_y;II=sparse(1:1:m*n,1:1:m*n,ones(1,m*n),m*n,m*n);A=II+lambda*Lg;u=A\g(:);u=reshape(u,m,n);figure;imshow([g,u]);</span>

0 0