ConvolutionFilter与DisplacementMapFilter
作者:xiankevin 类型:闪吧BBS 来源:闪吧
Flash8中新增了BitmapData的处理功能。提供了若干滤镜类,可以实现诸如阴影、发光、模糊等一系列效果,这些也比较直观。这里主要介绍一下ConvolutionFilter与DisplacementMapFilter这两个类能带来的一些其他的效果。
ConvolutionFilter类实现了图像矩阵卷积。构造函数如下:
public ConvolutionFilter(matrixX:Number, matrixY:Number, matrix:Array, [divisor:Number], [bias:Number], [preserveAlpha:Boolean], [clamp:Boolean], [color:Number], [alpha:Number])
这里matrix即为要与图像进行卷积操作的矩阵,一般称为模板。matrixX和matrixY指明了模板的大小。简单起见,我们以3*3的模板为例。
运算的公式可以这样表示(对于每个颜色通道):
dst (x, y) = ((src (x-1, y-1) * a0 + src(x, y-1) * a1....src(x, y+1) * a7 + src (x+1,y+1) * a8) / divisor) + biasa0—a8分别为matrix[0]—matrix[8]
可以简单理解为:
一个3*3大小的模板覆盖在图像上,并在图像上移动。模板中心位置(matrix[4])处图像的像素值为模板下9个像素值与模板各个元素值的加权求和(这里的求和是分别对每个a、r、g、b每个通道进行求和),再除以一个系数divisor防止图像过饱和。最终加上偏移量bias。(边界位置不考虑。)
(以下内容主要是数字图像处理方面的一些基础知识。我也只是曾选修过,没做过什么太深入的研究,表述有误的话敬请指正,不足之处还望大家包涵)
1、 平滑(模糊)处理。主要用于图像的降噪,也就是去除图像中的杂点(噪声)。用信号处理的话来说,就是对图像进行了低通滤波,滤除了高频分量。噪声也就是表现为与背景格格不入,属于高频分量。平滑操作的副作用就是图像会有一定程度的模糊失真。选取的模板不同,降噪的效果与模糊的程度也就不同。
最简单的就是线性平滑。选取模板为全为1的3*3矩阵,即[1, 1, 1, 1, 1, 1, 1, 1, 1],为使不改变原图像的平均灰度,divisor取9。直观看来就是把每个像素与其周围的8个像素值进行了平均。
还有就是高斯平滑。模板值是对二维高斯函数进行采样得到的,为[1, 2, 1, 2, 4, 2, 1, 2, 1],divisor相应为16。处理后,与上面的平滑滤波相比,它能在滤除噪声的同时,较好的保持了图像的边缘。
还有一种中值滤波对于图像中的椒盐噪声有更好的滤除效果,但它不是基于卷积的,用ConvolutionFilter难以实现。简单介绍一下吧。椒盐噪声意思就是杂点分布很随机,很少有同一小区域内出现很稠密的大量杂点,就像你往食物中洒椒盐一样,只要水平够好,椒盐颗粒可以很均匀。而中值滤波的实现就是把每个像素周围的若干像素值按大小排序,取中间的值作为该点的像素值。
可以想象如果一个纯白色的图像中,有一个像素为黑色,进行之前的平滑滤波的话,只能是淡化这一点,最终变成模糊的一陀灰色,而用中值滤波的话可以彻底除掉它!
点击浏览该文件
2、 锐化处理。锐化与平滑相反,是一个高通滤波器,以增强图像边缘。但它的副作用是会同时增强了图像中的噪声。
锐化处理主要用的是拉普拉斯模板。特点是中心元素为正,周围为负,模板值和为0。这样,如果一幅纯色的图像,那么处理后,所有的值将都变为0。但如果在是灰度值变化的边缘,将明显有一个更强烈的跳变,也就起到了锐化的效果。典型可将matrix取为[-1, -1, -1, -1, 9, -1, -1, -1, -1],divisor取为1。
点击浏览该文件
3、边缘检测。边缘就是像素值有阶跃变化的像素集合。按照高数中的知识,函数图像斜率的对应着该函数的一阶微分的值。而在图像中,则可以理解为像素值关于x轴和y轴的二维函数F(x, y)。边缘检测也就是对图像进行差分运算。边缘检测算子的算子很多,如一阶差分算子、Sobel算子、Roberts算子、Prewitt算子、Laplacian算子等。这里就只介绍一下Sobel算子。Sobel算子有两个分别用于检测水平边缘与竖直边缘,[1, 2, 1, 0 ,0, 0, -1, -2, -1]和[1, 0, -1, 2, 0, -2, 1, 0, -1]。
点击浏览该文件
记得前一阵看过的这个效果,就是雪花可以落在图像边缘 http://www.gskinner.com/blog/archives/2005/08/flash_8_webcam.html 虽然我没有摄像头,没有亲自看到,但可以想象,作者就是利用实时提取边缘后,检测雪花是否落在图像的边缘上的,至于如何检测可以参看作者另外提到的任意形状物体的碰撞检测的方法(之前我也转过来过)。
- 上一篇:
- 基础导航条制作
- 下一篇:
- 仿AI做法 金属质感的另一种简单表现方
- 相关教材
- ConvolutionFilter类的用法
- 最近更新
