Здравствуйте Гость ( Вход | Регистрация )


 
ОтветитьСоздать новую темуСоздать новое голосование

Каскадный · [ Стандартный ] · Линейный

> Сравнение 2 картинок

TaTaPuH
post 08.03.2005, 18:28
Отправлено #1


Пользователь
***

Группа: Пользователь
Сообщений: 93
Регистрация: 29.12.2004
Пользователь №: 6072




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

Сейчас я делаю это простым сравниванием яркости одинаковых пикселей на картинке, в результате чего получаю грубую и часто неправильную оценку. :angry:

Очень нуждаюсь в помощи. :unsure:

Спасибо.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Digimaster
post 08.03.2005, 19:30
Отправлено #2


Engineer
*********

Группа: Super Moderator
Сообщений: 1113
Регистрация: 18.10.2004
Из: Moscow
Пользователь №: 4520



Можно поинтересоваться вашим образованием? От вашего ответа будет зависеть вид рекомендаций.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
TaTaPuH
post 08.03.2005, 22:57
Отправлено #3


Пользователь
***

Группа: Пользователь
Сообщений: 93
Регистрация: 29.12.2004
Пользователь №: 6072



Неполное среднее :unsure:
Т.К. школьник я еще :blush:

Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Digimaster
post 08.03.2005, 23:02
Отправлено #4


Engineer
*********

Группа: Super Moderator
Сообщений: 1113
Регистрация: 18.10.2004
Из: Moscow
Пользователь №: 4520



Понятно, тогда коротко не получится. Формулу написать или как?
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
TaTaPuH
post 08.03.2005, 23:20
Отправлено #5


Пользователь
***

Группа: Пользователь
Сообщений: 93
Регистрация: 29.12.2004
Пользователь №: 6072



Да, если не составит труда.

Напишу как я делаю это сейчас:

Т.К. Рисунок черно-белый + оттенки черного то я сравниваю по 1 из компонент цвета. Беру константу и считаю кол-во точек, которые меньше константы и принимаю это значение за общее. Потом просто смотрю точки на одинаковых местах если они тоже меньше константы то увеличиваю число одинаковых точек. Потом считаю отношение всех к одинаковым. Но увы данный способ очень недейственный и дает грубую или же неправильную оценку
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Digimaster
post 08.03.2005, 23:26
Отправлено #6


Engineer
*********

Группа: Super Moderator
Сообщений: 1113
Регистрация: 18.10.2004
Из: Moscow
Пользователь №: 4520



Так, если я еще матанализ не забыл, то...

Вычисление двумерной взаимной корреляции.

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

Формула будет такая:

F = SUMMA{ a[i,j] * b[i,j] }

где F - взаимная корреляция,
a[i,j] - одно изображение,
b[i,j] - другое изображение.

Чем больше число F - тем выше степень совпадения.

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

Вот вам упрощенная теория. Написать по этой формуле программку - хорошее и приятное упражнение. Оставляю это удовольствие для вас.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
TaTaPuH
post 10.03.2005, 21:21
Отправлено #7


Пользователь
***

Группа: Пользователь
Сообщений: 93
Регистрация: 29.12.2004
Пользователь №: 6072



Можно поподробнее про картинки со смещением а то у меня именно такие и первый способ неправильно работает
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Digimaster
post 10.03.2005, 22:40
Отправлено #8


Engineer
*********

Группа: Super Moderator
Сообщений: 1113
Регистрация: 18.10.2004
Из: Moscow
Пользователь №: 4520



Ok, попробуем дальше :)

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

Так вот, чтобы такого не было, можно проделать следующее:
1) Складываем все элементы матрицы a.
2) Делим каждый элемент матрицы a на получившееся число.
Таким образом яркость любой точки новой матрицы a будет меньше или равна единице.
Тоже самое проделываем с матрицей b.

Если не хочется использовать плавающую точку, то можно отнормировать не к единице, а, скажем, к 1000 или любому другому числу для обеспечения необходимой точности. При вычислениях не забывайте о возможных переполнениях. Используйте переменные достаточной точности (размера).
Для "чайников" лучше всего применять плавающую точку. Там переполнения добиться сложно. Пусть все вычисления будут в double. На современных процессорах быстродействие пострадает не сильно.

Теперь про двумерную корреляцию.

Двумерная функция (если объяснять на картошке, как Чапаев) это функция двух переменных. Геометрически это поверхность в 3х мерном пространстве.
У нас случай дискретный, поэтому поверхность вырождается в совокупность отсчетов.
Т. е. вместо одного F мы должны получить матрицу (массив) таких F.

Как это делается:

В простейшем случае вы брали матрицу a и прикладывали к матрице b. Элемент к элементу. Скажем элемент a[1,1] прикладывался к b[1,1];
a[2,3] к b[2,3] и т.д.
Полученные пары перемножали, результаты умножений складывали в переменную F (См. формулу в предыдущем посте).

Теперь мы сделаем немного по-другому. Представьте, что вы приложили матрицы со смещением. Это как две книги друг на друге, но одна сдвинута вверх и влево. В таком кривом положении мы вычисляем F. Но как быть с элементами, которые оказались "за границей"? Можно представить, что за границей матрицы все элементы равны нулю, тогда все, что вылезло не будет влиять на результат.
Теперь берем одну матрицу и сдвигаем на один элемент вправо. Снова вычисляем F. И так далее. Когда сдвинули достаточно далеко (нет смысла смещать матрицы друг относительно друга настолько сильно, что ни один элемент не перемножится), то пора перейти назад и на строчку ниже.
Таким образом наши матрицы "проползут" одна по другой по змейке (или вернее строка за строкой), каждый раз вычисляя F. В конце концов у нас будет матрица результат, состоящая из F.
Какой из этих F нам нужен?
Догадаетесь?
;)
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
TaTaPuH
post 11.03.2005, 22:51
Отправлено #9


Пользователь
***

Группа: Пользователь
Сообщений: 93
Регистрация: 29.12.2004
Пользователь №: 6072



Спасибо за доступный ответ :lol: :lol: :lol:
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
TaTaPuH
post 12.03.2005, 23:25
Отправлено #10


Пользователь
***

Группа: Пользователь
Сообщений: 93
Регистрация: 29.12.2004
Пользователь №: 6072



Спасибо еще раз, работает ! :) :) :) :)
при этом очень хорошо даже суперрр

Сообщение отредактировал TaTaPuH - 12.03.2005, 23:28
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
Digimaster
post 13.03.2005, 11:27
Отправлено #11


Engineer
*********

Группа: Super Moderator
Сообщений: 1113
Регистрация: 18.10.2004
Из: Moscow
Пользователь №: 4520



Рад за вас. Если в основе программы лежит математика, то такая программа просто обязана работать хорошо :)

P.S. Подобная математика широко используется во многих местах. Даже радиолокаторы используют корреляционные методы... (Только не говорите: "Ах! Вот откуда ноги растут!" Лично я радиолокаторы не конструировал.)
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение

Быстрый ответОтветитьОпции темыСоздать новую тему
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

> Быстрый ответ


Показать смайлики в новом окне |  Включить смайлики |  Добавить подпись

    

 

Форум работает на движке Invision Power Board. Все права принадлежат IPB inc.
Realcoding.net © 2003-2005 | Контакт с администратором: admin@realcoding.net

@Mail.ru11)d.write('--'+'>')//--> HotLog realcoding.net Лучшие форумы рунета www.bestforums.net