画像分類

<?php
// 画像からカラーヒストグラムを計算する関数
    function make_histogram($path, $debug = TRUE){
        if ($debug) { echo "histogram: $path\n"; }
        $im_big = imagecreatefromjpeg($path);
        $sx_big = imagesx($im_big);
        $sy_big = imagesy($im_big);
        // 高速化するために縮小
        $sx = 256; $sy = 192;
        $im = imagecreatetruecolor($sx, $sy);
        imagecopyresampled($im, $im_big, 0, 0, 0, 0,
                           $sx, $sy, $sx_big, $sy_big);
        //ピクセルを数える
        $his = array_fill(0, 64, 0);
        for ($y = 0, $y < $sy; $y++){
            for ($x = 0; $x < $sy; $x++){
                $rgb = imagecolorat($im, $x, $y);
                $no = rgb2no($rgb);
                $his&#91;$no&#93;++;
            }
        }
        // 正規化
        $pixels = $sx * $sy;
        for ($i = 0; $i < 64; $i++){
            $his&#91;$i&#93; = $his&#91;$i&#93; / $pixels;
        }
        imagedestroy($im_big);
        imagedestroy($im);
        return $his;
    }

    // ヒストグラムを計算
    function rgb2no($rgb){
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb &0xFF;
        $rb = floor($r / 64);
        $gn = floor($g / 64);
        $bn = floor($b / 64);
        return 16 * $rn + 4 * $gn + $bn;
    }