Что это за алгоритм phash? - PullRequest
2 голосов
/ 07 марта 2012

Пока я читаю о phash, существует четыре типа:

  1. На основе дискретного косинусного преобразования (DCT)
  2. Оператор Марра-Хилдрета
  3. Aна основе радиальной дисперсии и
  4. Хеш-функция изображения на основе среднего значения блока.

В приведенном ниже коде вы можете видеть, что нет секции DCT.просто генерируя среднее значение кода и хэш-значения.Я уверен, что это может быть хэш-функция на основе среднего значения блока.но в этом среднем значении блока у алгоритма нет секретных ключей.

    <?php

    $filename = 'image.jpg';

    list($width, $height) = getimagesize($filename);


    $img = imagecreatefromjpeg($filename);

    $new_img = imagecreatetruecolor(8, 8);


    imagecopyresampled($new_img, $img, 0, 0, 0, 0, 8, 8, $width, $height);

    imagefilter($new_img, IMG_FILTER_GRAYSCALE);


    $colors = array();
    $sum = 0;


    for ($i = 0; $i < 8; $i++) {

        for ($j = 0; $j < 8; $j++) {

            $color = imagecolorat($new_img, $i, $j) & 0xff;

            $sum += $color;
            $colors[] = $color;

        }
    }

    $avg = $sum / 64;


    $hash = '';
    $curr = '';

    $count = 0;
    foreach ($colors as $color) {

        if ($color > $avg) {

            $curr .= '1';
        } else {

            $curr .= '0';
        }

        $count++;

        if (!($count % 4)) {

            $hash .= dechex(bindec($curr));

            $curr = '';
        }

    }

    print $hash . "\n";
?>

каков тип этого алгоритма?

1 Ответ

0 голосов
/ 10 ноября 2015

Для меня это выглядит как aHash, так как вычисляет хэш на основе среднего цвета изображения.

...