Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение картинок 
:(
    Опции темы
DoZENT
Дата 28.5.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



Мне нужно получить список дубликатов картинок в папке с миллионом файлов. Хочу это сделать путем создания ID для каждой картинки, а потом сравнивать по этому ID. Одинаковые картинки но с разными разрешениями также должны считаться дубликатами. Какие варианты предложите?

Это сообщение отредактировал(а) DoZENT - 28.5.2010, 10:06


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
esperanto
Дата 28.5.2010, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Вместо ИД, можно взять среднее значение, яркости
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
DoZENT
Дата 28.5.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



esperanto, пробовал не по яркости, а нахождением среднего цвета - все черные картинки считаются одинаковыми


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
esperanto
Дата 28.5.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Все черные картинки и есть одинаковые разве нет?
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
DoZENT
Дата 28.5.2010, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



esperanto, нет, есть картинки с черным фоном, который составляет 80% изображения, а в центре - изображены разные объекты


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
esperanto
Дата 28.5.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(DoZENT @ 28.5.2010,  11:38)
esperanto, нет, есть картинки с черным фоном, который составляет 80% изображения, а в центре - изображены разные объекты

В любом случае это произойдет.

Когда мы уменьшаем размер картинки, мы уменьшаем размерность пространства. Некоторые множество разных картинок перейдев в одну уменьшиную так или иначе. 

Если ИД это одно, число ты делаем редукцию в одномерное пространство. И тем более множество "похожих" перейдут в одну картинку.

Вместо пространства размерностью 1, можно например взять размерность 9. - Разделить картинку на 9 равных прямоугольников и для каждого посчитать средее.

-------------------------

Можно применить вероятностные методы. Основываясь на анализе случайно выбранных пикселей.

Но ВСЕГДА будут разные изображения,  которые будут трактоваться как одинаковое, ибо мы переходим в пространство с меньшей размерностью
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
nworm
Дата 28.5.2010, 17:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



DoZENT, можно в качестве id хранить всю картинку - большое число. Только в этом случае не произойдёт потери информации.э

Если же цель - получить для каждой картинки (увесистый файл) относительно маленькую характеристику, будут потери, в любом случае.

Добавлено через 5 минут и 21 секунду
можно так,

1. использовать маленькую характеристику (допустим средний цвет), для получения списков картинок подозрительных на одинаковость.
2. проверить каждый список картинок, подозрительных на одинаковость, на реальную одинаковость
PM MAIL WWW   Вверх
Pavia
Дата 28.5.2010, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Миллион это так мало. Для хранения миллиона надо всего 2.5 байта. На самом деле что бы сравнить картинки надо пройтись по всем пикселам только этот метод дает хорошее качество сравнения. Но ускорить сравнение мы можем для этого надо уменьшить число параметров по которым будем сравнивать. В принципе уменьшение подгонка картинке под 64x64 дает хороший результат. Так как еще пикселы могут отличаться незначительно, то  берем интенсивность пикселя и отбрасываем младшие 4 бита. И того имеем 1388 байта.  Так как 1388 на 1 000 000 = 1гбайт это много то предлагается взять от этих байт простой хэш 4 байтовй к примеру CRC и его использовать для сравнения.

Остальное додумай сам.

Добавлено через 3 минуты и 52 секунды
Брать среднее арифметическое, не есть правильное. Фактически при съемки одного объекта днем и ночью вы получити разные характеристики. Фактически тут надо отталкиваться от восприятия человека.

Это сообщение отредактировал(а) Pavia - 28.5.2010, 18:03
PM MAIL   Вверх
nworm
Дата 28.5.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



Цитата

Брать среднее арифметическое, не есть правильное. Фактически при съемки одного объекта днем и ночью вы получити разные характеристики. Фактически тут надо отталкиваться от восприятия человека.


Вообще-то в условии не сказано, что изображение одного объекта днём и ночью это одно и то же изображение. 
PM MAIL WWW   Вверх
Bitter
Дата 28.5.2010, 19:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 4
Всего: 27



Могу предложить такой алгоритм. Не знаю насколько он будет эффективно искать одинаковые, но думаю будет.

Нужно найти среднее взвешенное не яркостей пикселей а их координат. Но координаты умножать на коэфициент яркости. То есть:

AVGX = Сумма(i*(ярк[i,j]/max_ярк) )/Кол-во_пикс
AVGY = Сумма(j*(ярк[i,j]/max_ярк) )/Кол-во_пикс

тут max_ярк = 240 (в соответствии с цветовой моделью HLS)
      Кол-во_пикс = ширина * высота
       ярк[i,j] = яркость пикселя с координатами i, j по цветовой модели HLS

Вот, в результате вы получите две координаты в пространстве данной картинки. Если вы их разделите на ширину и высоту, то получите координаты в относительных единица (от 0 до 1). Таким образом для каждой картинки нужно хранить два числа Х и Y, которые вы посчитали. А при сравнении искать расстояние между этими координатами и если оно меньше заданного лимита, считайте, что картинки одинаковые.
PM MAIL ICQ Skype   Вверх
esperanto
Дата 28.5.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(Pavia @ 28.5.2010,  18:02)
  На самом деле что бы сравнить картинки надо пройтись по всем пикселам только этот метод дает хорошее качество сравнения.  

Почему вы так думаете? 
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
VictorTsaregorodtsev
Дата 29.5.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



DoZENT, в качестве ИДа для картинки выберите CRC32. Если ЦРЦшные коды всё же будут у некоторых картинок совпадать, можно добавить дополнительный код (например, контрольную сумму Флетчера).
Если форматы сжатия без потерь (гиф, пнг, тифф, бмп,...) и каждый раз палитра одинаковой глубины - то всё будет ОК. Ну и, если разные разрешения (и разные форматы сжатия) - то ИДы надо, естественно, считать для "разжатых" в память картинок. А вот если глубина палитры варьируется и используется сжатие с потерями (жпег, например) - то никакой расчет хэшей для картинок (и последующее определение эквивалентности картинок через равенство хэш-кодов) не подойдет, надо будет собирать какой-то эмпирический алгоритм (сначала сравниваем размеры картинок, потом, если размеры совпали, что-то другое, и т.д. до тех пор, пока не решим, одинаковые ли картинки или всё-таки разные).
PM MAIL WWW   Вверх
esperanto
Дата 29.5.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(VictorTsaregorodtsev @ 29.5.2010,  15:19)
DoZENT, в качестве ИДа для картинки выберите CRC32. Если ЦРЦшные коды всё же будут у некоторых картинок совпадать, можно добавить дополнительный код (например, контрольную сумму Флетчера).
Если форматы сжатия без потерь (гиф, пнг, тифф, бмп,...) и каждый раз палитра одинаковой глубины - то всё будет ОК. Ну и, если разные разрешения (и разные форматы сжатия) - то ИДы надо, естественно, считать для "разжатых" в память картинок. А вот если глубина палитры варьируется и используется сжатие с потерями (жпег, например) - то никакой расчет хэшей для картинок (и последующее определение эквивалентности картинок через равенство хэш-кодов) не подойдет, надо будет собирать какой-то эмпирический алгоритм (сначала сравниваем размеры картинок, потом, если размеры совпали, что-то другое, и т.д. до тех пор, пока не решим, одинаковые ли картинки или всё-таки разные).

Плохая идея.
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Bitter
Дата 31.5.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 4
Всего: 27



Цитата(esperanto @  29.5.2010,  16:47 Найти цитируемый пост)
Плохая идея.


Ваша идея:

Цитата(esperanto @  28.5.2010,  10:49 Найти цитируемый пост)
Вместо ИД, можно взять среднее значение, яркости


не просто не лучше, она хуже. Так что нечего писать бесполезные комменты, обосновывайте свои слова.

PM MAIL ICQ Skype   Вверх
esperanto
Дата 31.5.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(Bitter @ 31.5.2010,  11:28)
Цитата(esperanto @  29.5.2010,  16:47 Найти цитируемый пост)
Плохая идея.


Ваша идея:

Цитата(esperanto @  28.5.2010,  10:49 Найти цитируемый пост)
Вместо ИД, можно взять среднее значение, яркости


не просто не лучше, она хуже. Так что нечего писать бесполезные комменты, обосновывайте свои слова.

Вы заблуждаетесь.

Чем же СРС лучше чем среднее?
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1954 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.