У меня есть много файлов одной и той же картинки в различном разрешении, подходящих для всех устройств, таких как mobile, pc, psp и т. Д. Теперь я пытаюсь отображать только уникальные изображения на странице, но я не знаю, как это сделать. Я мог бы избежать этого, если бы я сохранил базу данных на первом месте, но я этого не сделал. И мне нужна ваша помощь в обнаружении самых больших уникальных снимков.
Ну, даже у вас есть довольно много алгоритмов, чтобы сделать это, я считаю, что это будет еще быстрее сделать это вручную. Загрузите все изображения, чтобы они загрузили их в какую-либо фотографию в виде фотоальбомов или любую другую программу, которая могла бы соответствовать аналогичным изображениям. Это займет у вас несколько часов, но реализация алгоритма соответствия изображений может занять гораздо больше. После этого вы могли бы потратить дополнительное время на изменение вашей текущей системы для хранения всего в БД. Исправьте причину проблемы, а не ее симптомы.
Установите головоломку gd2 и lib на свой сервер.
Головоломка Lib поражает и легко играет с этим. Проверьте этот фрагмент
<?php # Compute signatures for two images $cvec1 = puzzle_fill_cvec_from_file('img1.jpg'); $cvec2 = puzzle_fill_cvec_from_file('img2.jpg'); # Compute the distance between both signatures $d = puzzle_vector_normalized_distance($cvec1, $cvec2); # Are pictures similar? if ($d < PUZZLE_CVEC_SIMILARITY_LOWER_THRESHOLD) { echo "Pictures are looking similar\n"; } else { echo "Pictures are different, distance=$d\n"; } # Compress the signatures for database storage $compress_cvec1 = puzzle_compress_cvec($cvec1); $compress_cvec2 = puzzle_compress_cvec($cvec2);
Вы должны проверить, какое из двух изображений является самым маленьким, принять размер и сравнить только пиксели в размере прямоугольника.
Во-первых, ваша проблема вряд ли имеет отношение к PHP, поэтому я удалил этот тег и добавил более соответствующие теги.
Умное выполнение этого не потребует сравнения NxN. Вы можете использовать множество эвристик, но сначала я хотел бы спросить вас:
Являются ли все копии одного изображения точным изменением размера друг друга (есть ли какие-то обрезки – сопоставление обрезанных изображений с оригиналом может быть более сложным и трудоемким)?
Все изображения сгенерированы (изменены) с использованием одного и того же инструмента?
Как насчет параметров, которые вы использовали для изменения размера? Например, все изображения для отображения на PSP в одном разрешении?
Какова ваша оценка того, сколько уникальных изображений у вас есть (например, сколько копий каждой фотографии может быть в среднем)?
У вас уже есть какая-то классификация. Например, все мобильные изображения в отдельной папке (или различного разрешения, чем изображения ПК)? Это само по себе может значительно сократить количество сравнений, даже если вы выполняете грубую силу в противном случае.
Очень высокий уровень подсказывает, почему вам не нужны сравнения NxN: вы можете разработать множество различных приблизительных хэшей (например, распределение коэффициентов высокой / низкой частоты jpeg) и группировать «потенциально» похожие изображения вместе. Это может уменьшить количество сравнений, требуемых в 10-100 раз или даже больше, в зависимости от качества используемой эвристики и набора данных. Хеширование может выполняться даже на части изображений. 30000 не очень большое число, если вы используете правильные методы.
Источник: [SOLVED] Как обнаружить похожие изображения в PHP?
<?php /* Project: detect similar Images in PHP Project url: http://www.cricbell.com Author: Ali Kodor Zoarder,Bangladesh Version: 1.0.0 */ $img=new image_match; if($img->is_match('z.jpg','y.jpg')){ echo 'same image'; }else{ echo 'different image'; } class image_match{ /** * Function image byte code othoba jpeg image show korbe * @param string $base sotik jpeg image hote hobe * @param string $W sotik image width hote hobe * @param string $H sotik image height hote hobe * @param string $show true or false * @return jpeg image */ public function create($base,$W=40,$H=40,$show=false){ if($show==true){ header('Content-type: image/jpeg'); header('Cache-Control: public'); header('Pragma: cache'); } list($wn,$hn) = getimagesize($base); $base_image = imagecreatefromjpeg($base); $new = imageCreateTrueColor($W, $H); imageCopyResampled($new, $base_image, 0, 0, 0, 0, $W, $H, $wn, $hn); //imagejpeg($base_image); imageJpeg($new,null,100); imagedestroy($new); } /** * Function ek rokom image ki na ,seta zachai korbe * @param string $img_s_a sotik jpeg image hote hobe * @param string $img_s_b sotik jpeg image hote hobe * @return :true=motlob mil ase::false=motlob mil nei: */ public function is_match($img_s_a,$img_s_b){ ob_start(); $this->create($img_s_a,$W=40,$H=40,$show=false); $ia=ob_get_clean(); ob_start(); $this->create($img_s_b,$W=40,$H=40,$show=false); $ib=ob_get_clean(); //echo md5($ia); if(preg_match( '/'.md5($ia).'/' , md5($ib) )){ return true; }else{ return false; } } }