Сравнение 2-х изображений

Статус
В этой теме нельзя размещать новые ответы.

Найч

Алгоритмик :-)
ее исходник например можно распечатать и повесить в рамку на стену
Я не располагаю такой площадью))
Серьёзно может понадобится прога для создания фотоальбома с Цифровика, с подобной возможностью с БД для хранения описаний фотографий и т.д.
Не представляет никакой ценности с точки зрения разработки алгоритма, если я правильно понял формулировку.
 

bird

Guest
А по-моему, офигенная и полезная вещь должна получиться (если получиться:). Тут дело такое ... не стоит ограничиваться библиотекой картинок типа "я и моя собака" для поиска дупликатов. Есть задачи и поважнее. Однозначно, если есть желание - надо делать.
 

andry

Новичок
Найч:
Если напишешь прогу, которая способна обработать порядка 1 000 000 изображений за приемлемое время (не более минуты), обращайся на [email protected] . Толк будет и еще какой!
 

Найч

Алгоритмик :-)
andry
На ПК это невозможно в принципе, если картинки хотя бы по несколько кб. Хоть на двухпроцессорных, хоть на 64х.
Даже прочитать такой объем информации вряд ли получиться за минуту. А мэйнфреймами я не располагаю :)
 

andry

Новичок
Найч
Если предворительно обрабатывать изображение, строить, например, его карту или какой-нибудь хеш, то можеть быть:)
И, конечно, это алгоритм не для ПК.
 

sergadm

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

Найч

Алгоритмик :-)
складываем цвета всех пихселей
То ли я глупый, то ли при сложении цветов всех пикселей в градациях черного ты получишь одно число. И коим образом из него строить апроксимирующий многочлен?
Даже если предположить, что ты имел ввиду сложить три составляющих цвета (если RGB) для каждого пикселя, то апроксимирующий многочлен строить по тысячам значений - дело не шустрое. Можно сократить это множество, но не до единиц. Проясни идею.
Тут есть простое и красивое решение. Переход в пространство YCrCb сразу дает матрицу признаков Y, которую уже потом разными алгоритмами можно обработать - выделить значения с наибольшей информативностью, изменить тип признака и сжать. Все. Для сравнения между собой этого хватит.
 

sergadm

Новичок
выпало " по столбцам", брать значения не всех столбцов а через 10(или др число) те хдя картинки шириной 1024. будет 102 значения. практически не проверял. но по идее можно и без апроксимации сразу выполнять сравнения. что то вроде графика должно получится.
например графиком черного круга на белом фоне будет парабола.
 

Найч

Алгоритмик :-)
а ты проверь. Хотя бы теоретически.
Тебе привести пример картинок, которые будут "показывать" совершенно разные вещи, а твой алгоритм посчитает их абсолютно идентичными или ты сам догадаешся?
 

BigDaddy

Guest
Не могу удержаться от комментариев (уж простите)...

Для себя в данном топике я бы выделил (сформулировал) два вопроса:

1. Как сравнить два изображения (в том смысле, что похожие картинки могут находится в разных файлах и разных форматах. Напр. jpeg и tiff)?

2. Зачем это вообще может понадобиться?

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

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

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

Нота бене. Реализовать это дело на РНР.... При всем уважении к языку....

Вопрос номер 2.

Для чего это нужно... Можно придумать много применений.. В основном, подобные пограммы применяют для
1. Распознавание текстов
2. Машинное зрение (зрение роботов)
3. Секурити... Вычисление по фоткам бандюг из толпы и тп.
4. Поиск по картотеке изображений... И тд...

Опять же, даже если пункт 4. можно применять для веб проектов, реализовывать энто дело на РНР... При всем уважении...
 

Dmitry Yeskin

Guest
Как вариант

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

те выделить пропорциональные блоки (размер блока - от 1x1px до 100x100px) и из центров этих блоков производить трассировку на 360 градусов.

Так мы получим очертания (по резким скачкам контрасности) объекта\ов. Как хранить эти очертания не уверен (не математик я, но думаю можно решить эту задачу) из каждого блока.

Каждый блок это отдельный элемент массива, который в результате содержит свое очертание на 360 градусов (возможно очертание это еще один или несколько массивов)

Затем начать поиск примерно совпадающих очертаний в массиве блоков второй картинки. Если индексы будут отличаться то имеет место трансформация.

Попробовать определить тип трансформации - поворот, сжатие и тд.

После науденной трансформации сравнить очертания для двух картинок с учетом смещения индексов массивов (это смещение мы узнаем после определения была ли трансформация)

Это и весь алгоритм.

Скажу где он будет работать:
1) два одинаковых изображения - но одно чернобелое
2) два одинаковых изображения но одно повернуто на какое-то количество градусов
3) два изображения где на одном круг а на другом восьмерка - поймет как разные запросто
и тд

Где могут буть сложности:
1) изображения с большим количеством мелких элементов - пример города
2) кошку вряди отличит от собаки :)
и тд

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

Думаю мой метод имеет право на жизнь а если его совместить с цветовыми методами то вообще будут практически идеальные варианты.
 

zumo

Guest
Если кому надо могу написать за определённую плату точнее уже есть рабочий вариант его просто подточить под конкретную задачу
существующий скрипт без труда определяет похожесть 2х картинок над 1 из которых сделали -
- уменьшели в 2 раза потом растянули до произвольного рамера не соблюдая пропорций
- повернули на некий угол
- заменили пару цветов (фиолетовый - голубым)
- сделали blur
- обрезали по бокам
 

trent

Developer
zumo напишете мне пожайлуста в личку или письмо на phpclub-at-low.ru
 

nerezus

Вселенский отказник
Как вариант.
Пропатчить программу, чтобы она давала результаты в виде, пригодном, для пхп.

Поспрашивать на до на ресурсах, подобных wasm.ru )
 

trent

Developer
да мне пофигу на дату, мне важно с человеком связаться :)
 

trent

Developer
удалите отсюда мусор, просто когда видишь zumo Guest и кликая на инфо с его последнего сообщения в этом треде, получаешь текст такого содержания "Этот пользователь не зарегистрировался, и поэтому у него нет своего профайла на форуме.", то наводит на размышления..
 

Wicked

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