monotone blog

PHPのimageconvolution関数で畳み込み演算による画像処理

解決

画像の各画素(ピクセル)に対して、フィルターとなる配列を用いた「畳み込み演算」(コンボリューション)を行うことで、様々な画像処理を実現できます。

PHP(5.1以上)の場合は、imageconvolution関数でたたみ込み演算を行うことができます。

<?php
$image = imagecreatefromjpeg( 'src.jpg' );
$filter = array(
	array( 0.0, -1.0, 0.0 ),
	array( -1.0, 5.5, -1.0 ),
	array( 0.0, -1.0, 0.0 )
);
$div = array_sum( array_map( 'array_sum', $filter ));
imageconvolution( $image, $filter, $div, 0 );
imagejpeg( $image, 'out.jpg' );
imagedestroy( $image );
?>

具体的には、上記のようなコードで、「src.jpg」にフィルター処理を加えた画像を「out.jpg」として生成できます。

そして、$filter(3×3配列)の値を変更することで、色々な効果が得られます。

以下にいくつかのサンプルを載せてみますので、何かの参考になれば幸いです。

元画像

画像処理の例

サンプル1

$filter = array(
	array( 0.0, -1.0, 0.0 ),
	array( -1.0, 5.5, -1.0 ),
	array( 0.0, -1.0, 0.0 )
);

サンプル2

$filter = array(
	array( 2.0, 2.0, 2.0 ),
	array( 2.0, 0.0, 2.0 ),
	array( 2.0, 2.0, 2.0 )
);

サンプル3

$filter = array(
	array( -2.0, -1.0, 0.0 ),
	array( -1.0, 1.0, 1.0 ),
	array( 0.0, 1.0, 2.0 )
);

サンプル4

$filter = array(
	array( -1.0, -1.0, -1.0 ),
	array( -1.0, 8.0, -1.0 ),
	array( -1.0, -1.0, -1.0 )
);


参考)たたみ込み演算による画像処理

モバイルバージョンを終了