• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

photoshop图像滤镜——素描算法(含matlab与C代码)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

二、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代码如下:

 

I=imread(\'a1.jpg\',\'jpg\');  
imshow(I);  
figure();  
info_size=size(I);  
height=info_size(1);  
width=info_size(2);  
N=zeros(height,width);  
g=zeros(height,width);  
imggray=rgb2gray(I);  
out=zeros(height,width);  
  
spec=zeros(height,width,3);  
for i=1:height  
    for j=1:width  
          
        N(i,j)=255-imggray(i,j);  
          
    end  
end  
  
for i=2:height-1  
    for j=2:width-1  
        sum=0;  
        sum=1*double(N(i-1,j-1))+2*double(N(i-1,j))+1*double(N(i-1,j+1));  
        sum=sum+2*double(N(i,j-1))+4*double(N(i,j))+2*double(N(i,j+1));  
        sum=sum+1*double(N(i+1,j-1))+2*double(N(i+1,j))+1*double(N(i+1,j+1));  
        sum=sum/16;  
        g(i,j)=sum;  
    end  
end  
  
for i=1:height  
    for j=1:width  
        b=double(g(i,j));  
        a=double(imggray(i,j));  
        temp=a+a*b/(256-b);  
        out(i,j)=uint8(min(temp,255));  
          
    end  
end  
imshow(out/255);  

处理后图像如下:

 


 

C代码如下:

void rgb2gray(unsigned char r[1000][1000],unsigned char g[1000][1000],unsigned char b[1000][1000],unsigned char gray[1000][1000],int height,int width)
{
  int i,j;
  for(i=0;i<height;i++)
      for(j=0;j<width;j++)
      {
     
          gray[i][j]=r[i][j]/3+g[i][j]/3+b[i][j]/3;
     
      }
}


void sketch(unsigned char output_r[1000][1000],unsigned char output_g[1000][1000],unsigned char output_b[1000][1000],unsigned char gray[1000][1000],int height,int width)
{
    
    int i,j,sum;
    int a,b,temp;
    float ex;
    unsigned char inverse[1000][1000],guass_blur[1000][1000];
     for(i=0;i<height;i++)
        for(j=0;j<width;j++)
        {
     
           inverse[i][j]=255-gray[i][j];
      
        }
        
     for(i=1;i<height-1;i++)
        for(j=1;j<width-1;j++)
        {    
            
            sum=  inverse[i-1][j-1]+2*inverse[i-1][j  ]+  inverse[i-1][j+1]+
                2*inverse[i  ][j-1]+4*inverse[i  ][j  ]+2*inverse[i  ][j+1]+
                  inverse[i+1][j-1]+2*inverse[i+1][j  ]+  inverse[i+1][j+1];
            
            sum=sum/16;
            
            guass_blur[i][j]=sum;

        }
        
        for(i=0;i<height;i++)
        for(j=0;j<width;j++)
        {    
            if((i==0)||(i==height-1)||(j==0)||(j==width-1))
            {
            guass_blur[i][j]=0;    
            }

        }
             
    
        for(i=0;i<height;i++)
        for(j=0;j<width;j++)
        {
           b=guass_blur[i][j];
           a=gray[i][j];
           temp=a+a*b/(256-b);
           ex=temp*temp*1.0/255/255;
           temp=temp*ex;
           
           a=min(temp,255);

           output_r[i][j]=a;
           output_g[i][j]=a;
           output_b[i][j]=a;
      
        }
}

 

转载自:http://blog.csdn.net/wsfdl/article/details/7610634


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi 更改DBGrid 颜色技巧发布时间:2022-07-18
下一篇:
Matlab画星座图发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap