LINUX.ORG.RU

[python] сравнение изображений

 


0

0

Подскажите алгоритмы и способы сабжа?
Хочу написать незатейливую программку, коорая просканит мне указанную диру (рекурсивно) и попробует найти дубликаты изображений.

Или если подобная уже есть, ткните пальцем.

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

Сравнивать надо jpeg, bmp, png, gif

★★
Ответ на: комментарий от villager

мне не надо под винду. нету ее у меня уже оочень давно

vitroot ★★
() автор топика

>исключительно разрешением, или палитрой...

можно попробовать всё масштабировать в 100 на 100 пикселей, делать чёрнобелым и сравнивать по пиксельно, искать отличие в 3 пикселя, чёрнобелым можно делать если сумма r g b превышает какой-то порог, то белое, не превышает, то чёрное

p.s. жуткий велик с квадратными колёсами, может даже заработает, но наверняка всё давно украдено

dimon555 ★★★★★
()

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

RaySlava
()
Ответ на: комментарий от dimon555

решение неплохое.

>>p.s. жуткий велик с квадратными колёсами, может даже заработает


а есть иные варианты?

vitroot ★★
() автор топика
Ответ на: комментарий от vitroot

> а есть иные варианты?
Digikam + kipi-plugins это умеет.

Delay ★★
()

imgSeek (только написан он на питоне, поэтому тормозит жутко). А вообще, сравнение изображений - довольно нетривиальная задача (особенно если они имеют разный масштаб и немного отличаются в цветовой гамме).

man двумерные вейвлет-преобразования

Eddy_Em ☆☆☆☆☆
()

Что-то типа двухмерной корелляции наверно надо. На Си, конечно.

Absurd ★★★
()

http://en.wikipedia.org/wiki/Locality_sensitive_hashing

Обычно все изображения масштабируют до одного и того же размера, выравнивают уровни, потом делают какое-нибудь Фурье или вейвлетное преобразование, высокочастотные компоненты выкидывают, а из того, что останется, берут набор каких-нибудь усреднённых значений, как усреднять - не так уж важно, тут все извращаются, как могут, например, можно взять какие-нибудь средние значения для прямоугольных участков, или перейти к полярным координатам, тогда будет какая-то устойчивость к преобразованиям вращения исходной картинки. Потом уже сравнивают хэши разных изображений.

ero-sennin ★★
()
Ответ на: комментарий от ero-sennin

Можно то же самое, но нейросетями.

По замыслу, это должно выглядеть следующим образом для группы из 1024 картинок:
1. Масштабирование в 100х100
2. перевод в ч/б, автоуровни.
3. многослойная сеть, с первым convolution-слоем. При желании можно
сделать и несколько таких слоев. На выходе 10 нейронов, двоично
кодирующих номер картинки. Или 1024 нейрона, по каждому на одну
картинку.
4. Учить ее хитрыми градиентными спусками, типа rprop

После этого сеть будет картинки как орехи щелкать.

shutty
()
Ответ на: комментарий от shutty

Хм. Мысль про нейросеть весьма и весьма здравая. Единственное "но" после обучения она будет хорошо щелкать картинки, похожие на те, которым обучена. Для перехода с пейзажей на портреты, например, мне кажется, потребуется некоторое переобучение. Или я не прав?

RaySlava
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.