二、photoshop 图像滤镜——素描算法
素描的算法,网络上有多种,但是效果并不是特别理想。熟悉
photoshop 的朋友都知道,把彩色图片打造成素描的效果仅仅需要几步
操作:1、去色;2、复制去色图层,并且反色;3、对反色图像进行高
斯模糊;4、模糊后的图像叠加模式选择颜色减淡效果。
图像的去色较为简单,就不多解释。假设原图像为 X,处理后的
图像为 Y ,也就是说,对于坐标为(i,j)点,反色为 Y(i,j)=255-X(i,j)。
高斯模糊相当与一个低通滤波器,朋友们可以找找和高斯模糊有关的资
料。颜色减淡的算法是这样的:C =MIN( A +(A×B)/(255-B),255),
其中 C 为混合结果,A 为源像素点,B 为目标像素点。
matlab 代码如下:
[plain] view plaincopy
1. I=imread('a1.jpg','jpg');
2. imshow(I);
3. figure();
4. info_size=size(I);
5. height=info_size(1);
6. width=info_size(2);
7. N=zeros(height,width);
8. g=zeros(height,width);
9. imggray=rgb2gray(I);
10. out=zeros(height,width);
11.
12. spec=zeros(height,width,3);
13. for i=1:height
14. for j=1:width
15.
16. N(i,j)=255-imggray(i,j);
17.
18. end
19. end
20.
21. for i=2:height-1
22. for j=2:width-1
23. sum=0;
24. sum=1*double(N(i-1,j-1))+2*double(N(i-1,j))+1*double(N(i-1,j+1));
25. sum=sum+2*double(N(i,j-1))+4*double(N(i,j))+2*double(N(i,j+1));
26. sum=sum+1*double(N(i+1,j-1))+2*double(N(i+1,j))+1*double(N(i+1,j+1))
;
27. sum=sum/16;
28. g(i,j)=sum;
29. end
30. end
31.
32. for i=1:height
33. for j=1:width
34. b=double(g(i,j));
35. a=double(imggray(i,j));
36. temp=a+a*b/(256-b);
37. out(i,j)=uint8(min(temp,255));
38.
39. end
40. end
41. imshow(out/255);
处理后图像如下:
C 代码如下:
[plain] view plaincopy
1. void rgb2gray(unsigned char r[1000][1000],unsigned char g[1000][1000],unsign
ed char b[1000][1000],unsigned char gray[1000][1000],int height,int width)
2. {
3. int i,j;
4. for(i=0;i
5. for(j=0;j
44. for(j=0;j