Matlab-код для перцептивного хеширования

Мне нужен код Matlab для алгоритма перцептивного хеширования, описанного здесь: http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html

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

Для этого мне нужны следующие шаги: 1. Уменьшить DCT. Предположим, что DCT 32x32 (), просто оставьте верхний левый 8x8. Те представляют самые низкие частоты на картинке.

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

  2. Далее уменьшите DCT. Установите 64 хэш-разряда на 0 или 1 в зависимости от того, выше или ниже каждое из 64 значений DCT среднее значение. Результат не говорит нам фактические низкие частоты; это просто говорит нам очень грубый относительный масштаб частот к среднему. Результат не будет меняться, пока общая структура изображения остается неизменной; это может без проблем выдержать гамма-коррекцию и цветовую гистограмму.

  3. реконструировать изображение после обработки.

Кто-нибудь может помочь на любом из вышеперечисленных шагов? Я пробовал некоторый код, который дает некоторые результаты (в приведенной ниже ссылке), он еще не совершенен: https://stackru.com/questions/26748051/extract-low-frequency-from-dct-coeffecients-of-an-image-in-matlab

1 ответ

Попробуй это:

% read image
I = imread('cameraman.tif');

% cosine transform and reduction
d = dct2(I);
d = d(1:8,1:8);

% compute average
a = mean(mean(d));

% set bits, here unclear whether > or >= shall be used
b = d > a;
% maybe convert to string:
string = num2str(b(:)');
Другие вопросы по тегам