matalb编写程序实现ps的“素描滤镜”

ps的各种滤镜都可以用matlab代码来进行实现,今天给出一个例子:素描滤镜

原图如图:在这里插入图片描述
实验步骤如下:

1.首先原图就是灰度图,我们不需要进行去色处理,直接读取 即可,并对图像的灰度级归一化到[0 255]。
2.对原图进行反色得到图像B。
3.对图像B进行高斯模糊得到图C。
4.最后将图像C与图像B进行颜色减淡的图层混合算法得到最后处理效果,颜色减淡的公式为:结果色 = 基色 + (混合色 * 基色) / (255 - 混合色)。

matlab实现代码:

I=imread('D:/图像/fish.tif');  
figure(1); 
imshow(I);  
info_size=size(I);  
height=info_size(1);  
width=info_size(2);  
N=zeros(height,width);  %取反之后值
G=zeros(height,width);  %滤波之后值

%灰度级归一化到0-255
originalMinValue = double(min(min(I)));
originalMaxValue = double(max(max(I)));
originalRange = originalMaxValue - originalMinValue;

desiredMin = 0;
desiredMax = 255;
desiredRange = desiredMax - desiredMin;
V= desiredRange * (double(I) - originalMinValue) / originalRange + desiredMin;

gc =V(:,:,1);
channel = gc;
out=zeros(height,width);  

%颜色取反
for i=1:height  
    for j=1:width  
        N(i,j)=uint8(255-channel(i,j));   %double
    end  
end  
figure(2);
imshow(N,[0,255]);

%高斯模糊
gausize = 90;     %滤波器大小,越大越模糊
gausigma = 10;    %越大越模糊
GH = fspecial('gaussian', gausize, gausigma);
G = imfilter(N, GH);
figure(3);
imshow(G,[0,255]);


for i=1:height  
    for j=1:width  
        b=double(G(i,j));  
        a=double(channel(i,j));  
        temp=a+a*b/(255-b);    %颜色减淡算法
        out(i,j)=uint8(min(temp,255));  
    end  
end  
figure(4)
imshow(out/255);  
%模糊程度越高,得到的素描结果越清晰,框架纹理颜色越深

得到如下结果:
在这里插入图片描述
素描滤镜即可实现!这个例子也可以用于图像增强方面,使图片中的鱼骨及鱼刺清晰地显示出来。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值