photoshop图像滤镜——素描算法(含matlab与C代码)
生活随笔
收集整理的這篇文章主要介紹了
photoshop图像滤镜——素描算法(含matlab与C代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二、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
轉載于:https://www.cnblogs.com/yinxiangpei/articles/3307571.html
總結
以上是生活随笔為你收集整理的photoshop图像滤镜——素描算法(含matlab与C代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算从ios照片库中选取的图片文件大小
- 下一篇: UFLDL 教程学习笔记(三)自编码与稀