Flex中Convolution Matrix(卷积矩阵)的应用
You are missing some Flash content that should appear here! Perhaps your browser cannot display it, or maybe it did not initialize correctly.
Convolution Matrix(卷积矩阵)工作原理:
点阵图中的每一个像素被称为“初步像素”,用与卷积矩阵同样面积的“初步像素”从左到右从上到下与卷积矩阵中相应位置的值相乘,再将得到的9个或25个中间值相加,就得到了“初步像素”矩阵中央的一个值的结果值再与Divisor(因子)相除,与Offset(偏移量)相加,最后得到终值。如下图所示:

最初的像素50已经成为42(上图使用因子和偏移量的默认值1, 0):(40 * 0)+(42 * 1)+(46 * 0)+(46 * 0)+(50 * 0)+(55 * 0)+(52 * 0)+( 56 * 0)+(58 * 0)=42(过滤器不会作用于原图像,而是建立一个副本)。效果就是原来值为42的像素下移了一位。
Divisor(因子):得到的结果值将被其除;此参数如果与矩阵值的总和相等,那么图象的亮度无变化。如上图矩阵中值的总和为1,那么此值若为1图像则无明暗变化,若为5图像则变暗为原来的1/5,若为0.5图像则变亮为原来的2倍。
Offset(偏移量):得到的结果值将与其相加。
Convolution Matrix(卷积矩阵)的应用:
AS中:
import flash.filters.ConvolutionFilter;
var mat:Array = [ 1,0,1,0,1,0,1,0,1 ];
var div:int = 1;
var off:int = 0;
var convMat:ConvolutionFilter = new ConvolutionFilter(3,3,mat,div,off);
img.filters = [convMat];
MXML中:
<fx:Script>
<![CDATA[
private const mat:Array = [ 1,0,1,0,1,0,1,0,1 ];
]]>
</fx:Script>
<s:BitmapImage source="..."/>
<s:filters>
<s:ConvolutionFilter matrixX="3" matrixY="3" matrix="{mat}" divisor="1" bias="0" alpha="0"/>
</s:filters>
以下是一个Convolution Matrix(卷积矩阵)的效果实例:
相关链接:
Flex中Transform Matrix(变换矩阵)的应用(1)
Flex中Transform Matrix(变换矩阵)的应用(2)