Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2015, 22:13   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию сравнить два изображения на идентичность

Имеется два изображения разного разрешения( bmp 24 bit), пропорции сторон одинаковые и на глаз они практически одинаковые.

Как однозначно зная данные одного рисунка узнать что второй подобный?
Я понимаю что это задача распознавания образов.

Получу, допустим, R,G,B каждого пикселя.
Что с этими данными можно сделать?
Простым путем, допустим, сложить R всех пикселей изображения и разделить на количество пикселей получу среднее на пиксель, тоже самое по G и B.
Так полная ерунда получается.

какие есть варианты програмного сравнения изображений разного разрешения если они очень похожи.
Illusiony вне форума Ответить с цитированием
Старый 14.02.2015, 22:26   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

ну, например.
приводишь картинки к одному разрешению.
считаешь попиксельно цветовое расстояние:
dist_xy = (pixel1_xy_r - pixel0_xy_r)^2 + (pixel1_xy_g - pixel0_xy_g)^2 + (pixel1_xy_b - pixel0_xy_b)^2
собираешь статистику по расстояниям, если расстояний меньших некоторого порогового расстояния th_dist больше чем 2/3*width*height, то скажем, что картинки похожи.
f.hump вне форума Ответить с цитированием
Старый 14.02.2015, 22:41   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
ну, например.
приводишь картинки к одному разрешению.
считаешь попиксельно цветовое расстояние:
dist_xy = (pixel1_xy_r - pixel0_xy_r)^2 + (pixel1_xy_g - pixel0_xy_g)^2 + (pixel1_xy_b - pixel0_xy_b)^2
собираешь статистику по расстояниям, если расстояний меньших некоторого порогового расстояния th_dist больше чем 2/3*width*height, то скажем, что картинки похожи.
Поясните что здесь что:
1)pixel1_xy_r= R(pixel первого изображения)
2)pixel0_xy_r=R(pixel второго изображения)

это 'dist_xy' для каждого пикселя обоих изображений?
и эт о будет массив с количеством элементов= количеству пикселей изображений?
находим среднее значение из всего массива?

Или 0 и 1 это соседние пиксели одного изображения, Составляется массив и по второму изображению тоже самое, далее попиксельно сранивать и сколько пикселей совпало/ не совпало и будет степень схожести??
А не нужно ли еще извлечение корня из dist_xy или это не принципиально?

Последний раз редактировалось Illusiony; 14.02.2015 в 22:56.
Illusiony вне форума Ответить с цитированием
Старый 14.02.2015, 23:39   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

1)pixel1_xy_r= R(pixel первого изображения) да
2)pixel0_xy_r=R(pixel второго изображения) да

это 'dist_xy' для каждого пикселя обоих изображений? да
и эт о будет массив с количеством элементов= количеству пикселей изображений? да
находим среднее значение из всего массива? нет, строим гистограмму. и анализируем распределение "цветовых расстояний".
ну, можно и среднее посчитать и дисперсию, и если это среднее и дисперсия меньше некотрой пороговой величины, то принимаем решение относительно идентичности.

Последний раз редактировалось f.hump; 14.02.2015 в 23:49.
f.hump вне форума Ответить с цитированием
Старый 15.02.2015, 00:03   #5
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Спасибо. Одно замечание будет на 1 значение меньше чем количество пикселей?
Illusiony вне форума Ответить с цитированием
Старый 15.02.2015, 00:04   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

естественно. человек запарится такое делать.

чего? что меньше на 1? это про гистограмму?

идея гистогаммы:

определяешь интервал от минимально значения до максимального
задаешь разбиение интервала на сегменты
считаешь сколько точек ("цветовых расстояний") попадает в каждый из сегментов

Последний раз редактировалось f.hump; 15.02.2015 в 00:27.
f.hump вне форума Ответить с цитированием
Старый 15.02.2015, 00:32   #7
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

про меньше на 1 это количество значений расстояний на 1 меньше чем количество самих пикселей.
Illusiony вне форума Ответить с цитированием
Старый 15.02.2015, 00:41   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

нет.
картинка один сотоит из высота*ширина пикселей. картинка два содержит столько же пиксклей.

расстояние считается между картинками. от пикселя с координиатами (х, у) картинки один до пикселя к координатами (х, у) картинки два для каждого х: 0 <= х <= ширина, и у: 0 <= у <= высота
f.hump вне форума Ответить с цитированием
Старый 15.02.2015, 12:33   #9
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

На самом деле мне нужно найти соответствие 3х рисунков в базе из 500-1000 рисунков. Приведу разрешение к 57x114.Но все равно по такому алгоритму, который я все равно весь не понял) это займет много процессорного времени, а обработка не должна превышать 2-3 секунды среднего ПК.

Можно ли представит эти 500-1000 изображений в виде каких то компактных данных для сравнения, для уменьшения вычислений?

Другими словами можно ли предварительно не сравнивая изображения получить некий параметр( или набор параметров) для 500-1000 базовых изображений, а уж после сравнение этих данных по очереди с 1м нужным изображением?

2/3*width*height это 2/3 от минимального до максимального расстояния из всех расстояний то есть из всех 57х114=6498 в моем случае? Или от среднего расстояния всех пикселей? то есть просуммировать все расстояния и разделит на 6498 и это и будет мое width*height базовое?

Последний раз редактировалось Illusiony; 15.02.2015 в 12:43.
Illusiony вне форума Ответить с цитированием
Старый 15.02.2015, 13:17   #10
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
это займет много процессорного времени, а обработка не должна превышать 2-3 секунды среднего ПК.
не стоит недоценивать современные процы, такой простой счет проц проделает на 1000 картинок 720p меньше чем за секунду (при условии, что они лежат в памяти последовательно, 4 компоненты цвета на пиксель, время выделения и иницализации памяти не относится ко времени счета). что правда, если картинки разного раршения, и их нужно приводить к общему каким-то методом, то все будет немного медленнее. но разрешение 57х114 - это шара, даже без использования SSE процессор даже не вспотеет.

Цитата:
Можно ли представит эти 500-1000 изображений в виде каких то компактных данных для сравнения, для уменьшения вычислений?
может и можно. наверняка есть какие-нибудь интересные статистические методы.

Цитата:
2/3*width*height это 2/3 от минимального до максимального расстояния из всех расстояний то есть из всех 57х114=6498 в моем случае? Или от среднего расстояния всех пикселей? то есть просуммировать все расстояния и разделит на 6498 и это и будет мое width*height базовое?
всего рассояний width*height (57х114=6498) если 2/3 из них (2/3 от 6498) меньше "некоторой величины" то картинки идентичны. "некотороая величина" устанавливается эспериментальным путем по набору тестовых картинок.

Последний раз редактировалось f.hump; 15.02.2015 в 13:24.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнить два string? demigod82 Общие вопросы C/C++ 3 08.05.2012 23:07
Сравнить два файла demiancz Общие вопросы Delphi 22 16.02.2011 15:29
Сравнить два текстовых файла assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 17 29.09.2010 14:41
Сравнить два множества. Pascal MaxMelnikov Помощь студентам 3 16.03.2009 09:35
Сравнить два файла Aleksandr Microsoft Office Excel 6 07.10.2008 00:22