Advertisement

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

阅读量:

题目

联合双边滤波

通过方法实现图像的联合双边滤波

在这里插入图片描述

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)

注:当时思路完全遗忘了,我们这里提供一个代码给那些想偷懒的同学,希望真正想学习的同学能够再接再厉。

全部评论 (0)

还没有任何评论哟~