山东大学 数字图像处理 实验四

题目

联合双边滤波

实现图像的联合双边滤波
Function im = jbf(D,C,w, sigma_f, sigma_g)
D为输入图像
C为引导图像
W为滤波窗口大小
sigma_f 为spatial kernel标准差
sigma_g为range kernel 标准差

在这里插入图片描述

Code

function[]=test4(I,wsize,sigma_f,sigma_g)

I2=test2_1(I,0.5,0.5);
I3=test2_1(I2,2,2);

[m,n,~]=size(I);
wcenter=floor(wsize/2);

I4=zeros(m+2*wcenter,n+2*wcenter);
I4(wcenter+1:m+wcenter,wcenter+1:n+wcenter)=rgb2gray(I3);
I4=double(I4);

I5=zeros(m+2*wcenter,n+2*wcenter,3);
I5(wcenter+1:m+wcenter,wcenter+1:n+wcenter,:)=I;

newimg=zeros(m,n,3);

sk=zeros(wsize,wsize);%spatial kernel
rk=zeros(wsize,wsize);%range kernel

for i=1:wsize
    for j=1:wsize
        sk(i,j)=1/(2*pi*sigma_f^2)*exp(-((i-wcenter-1)^2+(j-wcenter-1)^2)/(2*sigma_f^2));     
    end
end

for i=1:m
    for j=1:n
        %cal tem
        sum=0;
        for p=1:wsize
            for q=1:wsize
                rk(p,q)=1/((2*pi)^(1/2)*sigma_g)*exp(-(I4(p+i-1,q+j-1)-I4(wcenter+i-1,wcenter+j-1))^2/(2*sigma_g^2));
                sum=sum+rk(p,q)*sk(p,q);
            end
        end
        tem=sk.*rk/sum;
        R=0;G=0;B=0;
        for a=1:wsize
            for c=1:wsize
                R=R+tem(a,c)*I5(a+i-1,c+j-1,1);
                G=G+tem(a,c)*I5(a+i-1,c+j-1,2);
                B=B+tem(a,c)*I5(a+i-1,c+j-1,3);
            end
        end
      
        newimg(i,j,1)=R;
        newimg(i,j,2)=G;
        newimg(i,j,3)=B;
    end
end
newimg=uint8(newimg);
figure;imshow(newimg)
figure;imshow(I)



注:当时的想法完全忘了,这里只给个代码给想偷懒的同学,真想要学习的请再加油

发布了31 篇原创文章 · 获赞 0 · 访问量 323

猜你喜欢

转载自blog.csdn.net/qq_36360463/article/details/104208825