总目录:http://blog.csdn.net/iloveas2014/article/details/38304477
4.5.3 基于距离的加权平均矩阵
现在,我们再测试一下那种圆形模糊的矩阵,对于3*3的矩阵来说,上下左右,以及中心这5个点为1.4,而矩阵四个角上的元素就是1,其计算依据是被卷积点到中心点的距离。这一规则对其它尺寸的矩阵仍然适用,所以我们在getConFilter的数组循环里实现这样的一个算法:
private function getConFilter(matrixSize:int, bias:Number = 0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0):ConvolutionFilter{ var amount:int = matrixSize * matrixSize; var divisor:Number = 0; //因为矩阵的元素值不再等于1,所以不能直接用matrixSize*matrixSize得到divisor var arr:Array = []; for(var i:int = 0; i < amount; i ++){ var matrixX:int = i % matrixSize; //矩阵的横坐标(行数) var matrixY:int = i / matrixSize; //矩阵的纵坐标(行数) var disX:int = matrixX - matrixSize; var disY:int = matrixY - matrixSize; var value:Number = Math.max(0, matrixSize - Math.sqrt(disX * disX + disY * disY)); //距离越大,要取的色彩数量越少,大于10的将不取色 arr[i] = value; divisor += value; //累加到divisor上 } return new ConvolutionFilter(matrixSize, matrixSize, arr, divisor * 0.5, bias, preserveAlpha, clamp, color, alpha); }
由于大于matrixSize的边角点不再参与运算,所以最后的效果您已经看不到边角处有明显的方块了,当然掉渣的现象依然存在(图 4.57),这种掉渣其实也有专业术语可以描述,叫做振铃现象(就好比铃铛,音钗等发声体振动时的感觉)。
图 4.57 改用圆矩阵后的效果
时间: 2024-10-09 09:58:34