Halcom 发表于 2017-3-8 23:26:51

kirsch锐化滤波器

function im1 = kirsch_fspecial(im,type)
    if nargin < 2
      type = 'kirsch';
    end
    if ~isa(im,'double')
      im = double(im)/255;
    end
   switch type
       case 'kirsch'% kirsch filter
      for dim=1:size(im,3)% 维数,RGB或者灰度图像
            a = im(:,:,dim);
            b=[-5 3 3;   % 模板1
                -5 0 3;
                -5 3 3]/1512;
            c=[3 3 3;    % 模板2
                -5 0 3;
                -5 -5 3]/1512;
            d=[3 3 3;    % 模板3
                3 0 3;
                -5 -5 -5]/1512;
            e=[3 3 3;    % 模板4
                3 0 -5;
                3 -5 -5]/1512;
            f=[3 3 -5;   % 模板5
                3 0 -5;
                3 3 -5]/1512;
            g=[3 -5 -5;% 模板6
                3 0 -5;
                3 3 3]/1512;
            h=[-5 -5 -5; % 模板7
                3 0 3;
                3 3 3]/1512;
            i=[-5 -5 3;% 模板8
                -5 0 3;
                3 3 3]/1512;
            b=conv2(a,b,'same');b=abs(b);% 卷积后求绝对值
            c=conv2(a,c,'same');c=abs(c);% 卷积后求绝对值
            d=conv2(a,d,'same');d=abs(d);% 卷积后求绝对值
            e=conv2(a,e,'same');e=abs(e);% 卷积后求绝对值
            f=conv2(a,f,'same');f=abs(f);% 卷积后求绝对值
            g=conv2(a,g,'same');g=abs(g);% 卷积后求绝对值
            h=conv2(a,h,'same');h=abs(h);% 卷积后求绝对值
            i=conv2(a,i,'same');i=abs(i);% 卷积后求绝对值
            p=max(b,c);% 取大值
            p=max(d,p);% 取大值
            p=max(e,p);% 取大值
            p=max(f,p);% 取大值
            p=max(g,p);% 取大值
            p=max(h,p);% 取大值
            p=max(i,p);% 取大值
            im1(:,:,dim) = double(p).*255;
      end
   end
end


页: [1]
查看完整版本: kirsch锐化滤波器