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);
%模糊程度越高,得到的素描结果越清晰,框架纹理颜色越深
得到如下结果:
素描滤镜即可实现!这个例子也可以用于图像增强方面,使图片中的鱼骨及鱼刺清晰地显示出来。