photoshop图像滤镜——素描算法

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值