图像滤镜艺术---(Sketch Filter)素描滤镜


(Sketch Filter)素描滤镜

素描滤镜的实现方法比较简单,这里我们直接写出算法过程如下:

1,对原图S进行去色命令得到灰度图A;

2,对A进行反色得到图像B;

3,对B进行高斯模糊得到图C;

4,将C与B进行颜色减淡的图层混合算法:

P(x,y) = Pb(x,y) + (Pb(x,y)* Pc(x,y)) / (256 - Pc(x,y));

在步骤3中,可以添加变量edgeIntensity(edgeIntensity>=0),来控制素描的边缘强度;

以上就是素描的算法实现。

核心代码如下:

private Bitmap SketchFilterProcess(Bitmap src, int edgeIntensity)

{

Bitmap gaussBitmap = gf.Apply(src, edgeIntensity);

Bitmap dst = new Bitmap(src);

int w = dst.Width;

int h = dst.Height;

BitmapData dstData = dst.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

BitmapData edgeData = gaussBitmap.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

byte* pGauss = (byte*)edgeData.Scan0;

byte* pDst = (byte*)dstData.Scan0;

int offset = dstData.Stride - w * 4;

int gray, graySrc, grayGauss;

for (int j = 0; j < h; j++)

{

for (int i = 0; i < w; i++)

{

graySrc = (pDst[0] + pDst[1] + pDst[2]) / 3;

grayGauss = 255 - (pGauss[0] + pGauss[1] + pGauss[2]) / 3;

gray = graySrc + (graySrc * grayGauss) / (256 - grayGauss);

gray = Math.Min(255, Math.Max(0, gray));

pDst[0] = (byte)gray;

pDst[1] = (byte)gray;

pDst[2] = (byte)gray;

pDst[3] = (byte)255;

pGauss += 4;

pDst += 4;

}

pGauss += offset;

pDst += offset;

}

dst.UnlockBits(dstData);

gaussBitmap.UnlockBits(edgeData);

return dst;

}

效果图如下所示:

原图

素描滤镜效果图

最后放上完整C#/C程序DEMO下载连接:http://www.zealpixel.com/thread-64-1-1.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 23:00:29

图像滤镜艺术---(Sketch Filter)素描滤镜的相关文章

Atitit (Sketch Filter)素描滤镜的实现 &#160;图像处理 &#160;attilax总结

Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结 Sch lg java d sketch filter aigo se ,ma sinsho ..byedu 3page ma ... 素描滤镜的实现方法比较简单,这里我们直接写出算法过程如下: 1,对原图S进行去色命令得到灰度图A: 2,对A进行反色得到图像B: 3,对B进行高斯模糊得到图C: 4,将C与B进行颜色减淡的图层混合算法: P(x,y) = Pb(x,y) + (Pb(x,y)* Pc(x

图像滤镜艺术---Glow Filter发光滤镜

Glow Filter发光滤镜 Glow Filter发光滤镜是一种让图像产生发光效果的滤镜,它的实现算法如下: 1,对原图P进行高斯模糊得到图像A: 2,将P和A进行"叠加"图层混合处理,公式如下: Result(x,y) = ((basePixel(x,y) <= 128) ? (mixPixel(x,y) * basePixel(x,y) / 128):(255 - (255 - mixPixel(x,y)) * (255 - basePixel(x,y)) / 128))

图像滤镜艺术---Swirl滤镜

Swirl Filter Swirl 滤镜是实现图像围绕中心点(cenX,cenY)扭曲旋转的效果,效果图如下: 原图 效果图 代码如下: // /// /// Swirl Filter /// /// Source image. /// The X position of Swirl. /// The Y position of Swirl. /// The degree of swirl,0-360. /// The result image. private Bitmap SwirlFil

图像滤镜艺术---Wave滤镜

Wave Filter水波滤镜 水波滤镜是通过坐标变换来模拟水波效果,使图像呈现出水波的特效.这个滤镜有一个可调参数:水波的扭曲程度. 代码如下; // /// /// Wave Filter /// /// Source image. /// The degree of wave,0-100. /// The result image. private Bitmap WaveFilterProcess(Bitmap srcBitmap, int degree) { Bitmap a = new

图像滤镜艺术---(Instagram)1977滤镜

图像特效---(Instagram)1977滤镜 本文介绍1977这个滤镜的具体实现,这个滤镜最早是Instagram中使用的 ,由于Instagram滤镜备受欢迎,因此,美图秀秀中也使用了这个滤镜,只是名字不是1977,而是1970. 原理不多说了,直接给出代码最实在,这个代码是经过优化过的,复杂的算法都已经写成了一个映射表,这样做可以大大提高效率,代码如下: private Bitmap FilterProcess(Bitmap a) { Bitmap srcBitmap = new Bit

图像滤镜艺术--方法论

最近,对我所知道的滤镜开发方法做个总结,分享给大家,知识多数来自网络,我在这里做个小结. 所谓滤镜,最初是指安装在相机镜头前过滤自然光的附加镜头,用来实现调色和添加效果.我们做的滤镜算法又叫做软件滤镜,是对大部分镜头滤镜进行的模拟,当然,误差也就再所难免,我们的宗旨只是无限逼近.也是这个原因,我们无法再现真实的拍摄场景,无法复原照片中未包含的信息,进而也难以实现某些特殊滤镜效果,诸如偏光镜和紫外线滤色镜(UV)的效果等等. 目前一款软件滤镜效果的实现,我们可以归结为以下几个部分: 1,基本变换

图像滤镜艺术--Toaster滤镜

根据Instagram CEO的说法,Toaster滤镜是Instagram所有滤镜中最复杂的滤镜,这个滤镜给人一种新奇的红色烘烤感,很能让人联想起这个Toaster单词的本意呵呵,今天我将用C#实现这个滤镜,当然我也只是探索,如何逼近它的效果,差异的存在在所难免,大家勿怪哦. 按照之前的说法,还是先使用Photoshop进行模拟,然后根据模拟步骤,进行C#代码编写. 首先,看下效果图: (a)PS效果图 (b)Instagram效果图 (c)C#代码效果图 效果怎么样我说了不算呵呵,下面介绍P

图像滤镜艺术---霓虹、浮雕、木刻滤镜

图像特效往往可以将普通的照片呈现出一种令人耳目一新的效果,特效的种类繁多,比如各种流行的 滤镜特效等等,今天,我们介绍几种最简单的滤镜:霓虹效果,浮雕效果和木刻效果. 1,霓虹滤镜 霓虹是用来描绘图像的轮廓,勾画出颜色变化的边缘,加强其过度效果,使图像产生轮廓发光的效果.主要原理是根据当前像素与其右方和下方像素的梯度运算,然后将结果值作为当前像素值,即将原图当前下像素的RGB分量与其右方和下方像素做梯度 运算(差的平方和平方根),然后将梯度值作为处理后的像素的RGB三个分量. 算法过程如下公式所

用PIL实现滤镜(一)——素描、铅笔画效果

在计算机图形学发展史中,真实感绘制一直是主旋律.不过从20实际90年代中期开始,非真实感图像绘制(Non-Photorealistic Rendering,NPR)逐渐成为一个研究热点.说白了,真实感绘制目标是像照片般真实地再现客观世界,而非真实感图像绘制专注于图形个性化和艺术化的表达,它主要用来表现图形的艺术特质,以及模拟艺术作品(甚至包括作品中的缺陷). 在介绍完非真实感图像绘制之后,我们再来提及一下PIL--Python Imaging Library(官方网址).相信使用python的朋