Matlab-код для перцептивного хеширования
Мне нужен код Matlab для алгоритма перцептивного хеширования, описанного здесь: http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
По сути, я хочу, чтобы это удаляло детали в изображении и оставляло информацию только о главных компонентах структуры.
Для этого мне нужны следующие шаги: 1. Уменьшить DCT. Предположим, что DCT 32x32 (), просто оставьте верхний левый 8x8. Те представляют самые низкие частоты на картинке.
Вычислить среднее значение. Как и средний хэш, вычислите среднее значение DCT (используя только низкочастотные значения DCT 8x8 и исключая первое слагаемое, поскольку коэффициент постоянного тока может значительно отличаться от других значений и будет отбрасывать среднее значение).
Далее уменьшите DCT. Установите 64 хэш-разряда на 0 или 1 в зависимости от того, выше или ниже каждое из 64 значений DCT среднее значение. Результат не говорит нам фактические низкие частоты; это просто говорит нам очень грубый относительный масштаб частот к среднему. Результат не будет меняться, пока общая структура изображения остается неизменной; это может без проблем выдержать гамма-коррекцию и цветовую гистограмму.
реконструировать изображение после обработки.
Кто-нибудь может помочь на любом из вышеперечисленных шагов? Я пробовал некоторый код, который дает некоторые результаты (в приведенной ниже ссылке), он еще не совершенен: 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(:)');