|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.02.2015, 22:13 | #1 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
сравнить два изображения на идентичность
Имеется два изображения разного разрешения( bmp 24 bit), пропорции сторон одинаковые и на глаз они практически одинаковые.
Как однозначно зная данные одного рисунка узнать что второй подобный? Я понимаю что это задача распознавания образов. Получу, допустим, R,G,B каждого пикселя. Что с этими данными можно сделать? Простым путем, допустим, сложить R всех пикселей изображения и разделить на количество пикселей получу среднее на пиксель, тоже самое по G и B. Так полная ерунда получается. какие есть варианты програмного сравнения изображений разного разрешения если они очень похожи. |
14.02.2015, 22:26 | #2 |
C/C++, Asm
Участник клуба
Регистрация: 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, то скажем, что картинки похожи. |
14.02.2015, 22:41 | #3 | |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Цитата:
1)pixel1_xy_r= R(pixel первого изображения) 2)pixel0_xy_r=R(pixel второго изображения) это 'dist_xy' для каждого пикселя обоих изображений? и эт о будет массив с количеством элементов= количеству пикселей изображений? находим среднее значение из всего массива? Или 0 и 1 это соседние пиксели одного изображения, Составляется массив и по второму изображению тоже самое, далее попиксельно сранивать и сколько пикселей совпало/ не совпало и будет степень схожести?? А не нужно ли еще извлечение корня из dist_xy или это не принципиально? Последний раз редактировалось Illusiony; 14.02.2015 в 22:56. |
|
14.02.2015, 23:39 | #4 |
C/C++, Asm
Участник клуба
Регистрация: 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. |
15.02.2015, 00:03 | #5 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Спасибо. Одно замечание будет на 1 значение меньше чем количество пикселей?
|
15.02.2015, 00:04 | #6 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
естественно. человек запарится такое делать.
чего? что меньше на 1? это про гистограмму? идея гистогаммы: определяешь интервал от минимально значения до максимального задаешь разбиение интервала на сегменты считаешь сколько точек ("цветовых расстояний") попадает в каждый из сегментов Последний раз редактировалось f.hump; 15.02.2015 в 00:27. |
15.02.2015, 00:32 | #7 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
про меньше на 1 это количество значений расстояний на 1 меньше чем количество самих пикселей.
|
15.02.2015, 00:41 | #8 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
нет.
картинка один сотоит из высота*ширина пикселей. картинка два содержит столько же пиксклей. расстояние считается между картинками. от пикселя с координиатами (х, у) картинки один до пикселя к координатами (х, у) картинки два для каждого х: 0 <= х <= ширина, и у: 0 <= у <= высота |
15.02.2015, 12:33 | #9 |
Форумчанин
Регистрация: 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. |
15.02.2015, 13:17 | #10 | |||
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Цитата:
Цитата:
Цитата:
Последний раз редактировалось f.hump; 15.02.2015 в 13:24. |
|||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сравнить два 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 |