Digital image processing Shandong University Experiment 4

topic

Joint bilateral filter

Joint Bilateral Filtering image
Function jbf IM = (D, C, W, sigma_f, sigma_g)
D input image
C is the guide image
W is the filter window size
sigma_f spatial kernel of standard deviation
sigma_g range kernel of standard deviation

Here Insert Picture Description

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)



Note: The idea was completely forgotten, here only to the code to want to be lazy students really want to learn Please refuel

Published 31 original articles · won praise 0 · Views 323

Guess you like

Origin blog.csdn.net/qq_36360463/article/details/104208825