需要標準化才能保持圖像平衡(否則任何濾鏡都可能很快將圖像變成幾乎全黑或全白)。
這裡有一個簡短易用的類別,可以自動處理標準化,並更容易輸入 3x3 矩陣。
此程式碼遵循 `imageconvolution()` 函式使用的「三個陣列的陣列」語法,並自動計算標準化所需的除數。
<?php
class ConvolutionFilter {
public $matrix;
public $div;
public function computeDiv() {
$this->div = array_sum ($this->matrix[0]) + array_sum ($this->matrix[1]) + array_sum ($this->matrix[2]);
}
function __construct() {
$matrix = func_get_args();
$this->matrix = array( array($matrix[0], $matrix[1], $matrix[2]),
array($matrix[3], $matrix[4], $matrix[5]),
array($matrix[6], $matrix[7], $matrix[8])
);
$this->computeDiv();
}
}
?>
範例用法
<?php
$gaussianFilter = new ConvolutionFilter( 1.0, 2.0, 1.0,
2.0, 3.0, 2.0,
1.0, 2.0, 1.0 );
imageconvolution($image, $gaussianFilter->matrix, $gaussianFilter->div, 0);
?>
一些常用的濾鏡
<?php
$identityFilter = new ConvolutionFilter( 0.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 0.0 );
$sharpenFilter = new ConvolutionFilter( 0.0, -1.0, 0.0,
-1.0, 5.0, -1.0,
0.0, -1.0, 0.0 );
$edgeFilter = new ConvolutionFilter( 0.0, 1.0, 0.0,
1.0, -4.0, 1.0,
0.0, 1.0, 0.0 );
$findEdgesFilter = new ConvolutionFilter( -1.0, -1.0, -1.0,
-2.0, 8.0, -1.0,
-1.0, -1.0, -1.0 );
?>
請記住,您可以使用 imagefilter() 來滿足這些基本需求,但當您想創建自己的濾鏡時,上述類別將使操作更加容易。