http://www.360docs.net/doc/info-f97ab97f168884868762d66f-4.html
二、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');
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 charr[1000][1000],unsigned char g[1000][1000],unsign
ed char b[1000][1000],unsigned chargray[1000][1000],int height,int width)
2. {
3. int i,j;
4. for(i=0;i<height;i++)
5. for(j=0;j<width;j++)
6. {
7.
8. gray[i][j]=r[i][j]/3+g[i][j]/3+b[i][j]/3;
9.
10. }
11. }
12.
13.
14. void sketch(unsigned charoutput_r[1000][1000],unsigned char output_g[1000][
1000],unsigned charoutput_b[1000][1000],unsigned char gray[1000][1000],int height,int width)
15. {
16.
17. int i,j,sum;
18. int a,b,temp;
19. float ex;
20. unsigned char inverse[1000][1000],guass_blur[1000][1000];
21. for(i=0;i<height;i++)
22. for(j=0;j<width;j++)
23. {
24.
25. inverse[i][j]=255-gray[i][j];
26.
27. }
28.
29. for(i=1;i<height-1;i++)
30. for(j=1;j<width-1;j++)
31. {
32.
33. sum= inverse[i-1][j-1]+2*inverse[i-1][j ]+ inverse[i-1][j+1]+
34. 2*inverse[i ][j-1]+4*inverse[i ][j ]+2*inverse[i ][j+1]+
35. inverse[i+1][j-1]+2*inverse[i+1][j ]+ inverse[i+1][j+1];
36.
37. sum=sum/16;
38.
39. guass_blur[i][j]=sum;
40.
41. }
42.
43. for(i=0;i<height;i++)
44. for(j=0;j<width;j++)
45. {
46. if((i==0)||(i==height-1)||(j==0)||(j==width-1))
47. {
48. guass_blur[i][j]=0;
49. }
50.
51. }
52.
53.
54. for(i=0;i<height;i++)
55. for(j=0;j<width;j++)
56. {
57. b=guass_blur[i][j];
58. a=gray[i][j];
59. temp=a+a*b/(256-b);
60. ex=temp*temp*1.0/255/255;
61. temp=temp*ex;
62.
63. a=min(temp,255);
64.
65. output_r[i][j]=a;
66. output_g[i][j]=a;
67. output_b[i][j]=a;
68.
69. }
70. }
欢迎朋友们多多指教,欢迎分享,请注明出处-----(wsfdl)!
本文档下载自360文档中心,www.360docs.net更多营销,职业规划,工作简历,入党,工作报告,总结,学习资料,学习总结,PPT模板下载,范文等文档下载;转载请保留出处:http://www.360docs.net/doc/info-f97ab97f168884868762d66f.html