PS 滤镜算法原理——染色玻璃

版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/shinian1987/article/details/30485639

%%%% 完毕PS 中的染色玻璃滤镜特效
clc;
clear all;
close all;

Image=imread('4.jpg');
Image=double(Image);

Gray_Image=rgb2gray(Image/255);
[row,col]=size(Gray_Image);
S_filter=fspecial('sobel');
G=sqrt(imfilter(Gray_Image, S_filter, 'replicate').^2+...
       imfilter(Gray_Image, S_filter, 'replicate').^2);
   
% % % % 利用形态学细化切割图像
%%%% 形态学中的结构算子的大小,决定了切割的块的大小
Block_Size=8;
G2=imclose(imopen(G,ones(Block_Size,Block_Size)), ones(Block_Size,Block_Size));
L=watershed(G2);
wr=L==0;
figure, imshow(wr);

Label_num=bwlabel(1-wr,4);
%%% figure, imshow(Label_num);

length=max(Label_num(:));
Color_array(1:length,1:3)=1000;

for i=1:row
    for j=1:col
        Num=Label_num(i,j);
        if(Num==0)
            Image(i,j,1)=255;
            Image(i,j,2)=255;
            Image(i,j,3)=255;
        else
            if(Color_array(Num,1)==1000)
                 Color_array(Num,1)=Image(i,j,1);
                 Color_array(Num,2)=Image(i,j,2);
                 Color_array(Num,3)=Image(i,j,3);
            else
                Image(i,j,1)=Color_array(Num,1);
                Image(i,j,2)=Color_array(Num,2);
                Image(i,j,3)=Color_array(Num,3);
            end
        end
    end
end

G_filter=fspecial('gaussian',6,0.5);
G_image=imfilter(Image, G_filter);
L_filter=[-1 -1 -1; -1 9 -1; -1 -1 -1];
Image=imfilter(G_image, L_filter);

figure, imshow(Image/255);


原图:


效果图:







posted on 2019-04-30 10:38  xfgnongmin  阅读(248)  评论(0编辑  收藏  举报

导航