2014-11-04 2 views
-1

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

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

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

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

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

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

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

+0

A [Быстрый поиск] (https: // WWW. google.com/webhp?q=matlab%20perceptual%20hash#safe=off&q=matlab+perceptual+hash) дал [этот результат] (http://users.ece.utexas.edu/~bevans/projects/hashing/toolbox /) и другие потенциально интересные страницы. Возможно, вы можете начать с этого. - Кроме того, я не уверен, что вы хотите от шага 4, но, как правило, хеширование - это односторонний процесс. –

ответ

0

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

% 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(:)'); 
+0

Я разместил код и результаты здесь: http: //stackoverflow.com/questions/26748051/extract-low-frequency-from-dct-coeffecients-of-an-image-in-matlab – emilywuq

Смежные вопросы