Russian Qt Forum

Qt => Мультимедиа => Тема начата: pakulo от Ноябрь 02, 2007, 23:43



Название: Найти позицию картинки в картинке
Отправлено: pakulo от Ноябрь 02, 2007, 23:43
Есть скажем картинки 200х600 и есть картинка 200х1.
Как можно найти по какой координате у размещена картинка 2 в картинке 1.

Спасиб!


Название: Re: Найти позицию картинки в картинке
Отправлено: pakulo от Ноябрь 02, 2007, 23:57
есть вариант сравнить по пикселям, но может как-то по-другому можно...


Название: Re: Найти позицию картинки в картинке
Отправлено: QCasper от Ноябрь 03, 2007, 00:04
Что значит "Есть"? Дано два QImage или что?


Название: Re: Найти позицию картинки в картинке
Отправлено: Dodge от Ноябрь 03, 2007, 00:34
Чето я не понял, нужна корреляционная функция для нахождения заданного изобрижения внутри целевого?


Название: Re: Найти позицию картинки в картинке
Отправлено: pakulo от Ноябрь 03, 2007, 00:35
Чето я не понял, нужна корреляционная функция для нахождения заданного изобрижения внутри целевого?
да

to QCasper, да, дано два QImage


Название: Re: Найти позицию картинки в картинке
Отправлено: Kainit от Ноябрь 03, 2007, 15:05
Если задача простая (а я подозреваю что она именно такая), пройдитесь в цикле и попиксельно сравните.

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

Поставьте задачу корректно, если хотите получить толковый ответ.


Название: Re: Найти позицию картинки в картинке
Отправлено: pakulo от Ноябрь 03, 2007, 19:52
Задача простая но усложненная...
Картинки крутить не нужно...
Просто есть картинка 400х200 и 400х1 и нужно найти позицию второй в первой, по высоте...
Тут другая проблема возникла, что пару пикселей второй картинке чу-чуть могут отличаться из-за другого качества jpg.
Поэтому просто по пикселям сравнить нельзя, есть какие-то алгоритмы?


Название: Re: Найти позицию картинки в картинке
Отправлено: Dodge от Ноябрь 04, 2007, 00:28
Задача простая но усложненная...
Картинки крутить не нужно...
Просто есть картинка 400х200 и 400х1 и нужно найти позицию второй в первой, по высоте...
Тут другая проблема возникла, что пару пикселей второй картинке чу-чуть могут отличаться из-за другого качества jpg.
Поэтому просто по пикселям сравнить нельзя, есть какие-то алгоритмы?
Хм... ну можно считать степень "похожести" строк, по каждой из цветовых компонент.

Берем пиксель p1 на целевом изображении, и пиксель p2 на заданном.
Т.о.
Код:
float factor[n] = 0.0; // где n - кол-во строк
...//цикл перебора
       
...factor[y] += p1.red/p2.red + p1.green/p2.green + p1.blue/p2.blue;


у какой строки factor меньше та и похожа.

Это не лучший вариант, но самый простой


Название: Re: Найти позицию картинки в картинке
Отправлено: Dodge от Ноябрь 04, 2007, 01:03
ДА, совсем головане работает, проверку деления на 0 нада ввести... а лучше сделать следующее: заменять значение компонент - 0, на 1, точность сильно не уменьшится, зато головной боли меньше.  :)


Название: Re: Найти позицию картинки в картинке
Отправлено: pakulo от Ноябрь 04, 2007, 01:38
Спасибо! Сделал почти также, только еще проще, пока вроде работает...
Хотя твой вариант получше будет...

Сделал так:
считываю попикселям и считаю сколько одинаковых пикселей, в какой строке больше то и записываю


Название: Re: Найти позицию картинки в картинке
Отправлено: Dodge от Ноябрь 04, 2007, 01:52
Спасибо! Сделал почти также, только еще проще, пока вроде работает...
Хотя твой вариант получше будет...

Сделал так:
считываю попикселям и считаю сколько одинаковых пикселей, в какой строке больше то и записываю
Это решение конечно, но корреляцией это уже сложно назвать ;D

А вообще, если картинко будет пережата, то одинаковых пикселов вообще не найдешь.


Название: Re: Найти позицию картинки в картинке
Отправлено: pakulo от Ноябрь 04, 2007, 02:51
Да, мой способ работает через раз (((
А твой я что-то реализовал но оно вообще не правильно показывает...
Можешь проверить и скинуть примерчик?


Название: Re: Найти позицию картинки в картинке
Отправлено: Tonal от Ноябрь 04, 2007, 09:55
Если трактовать цвет пиксела как точку в трёхмерном цветовом пространстве RGB, то можно определить цветовое расстояние между 2мя цветами:
Код:
colod_diff = abs(sqrt(r1*r1+g1*g1+b1*b1)-sqrt(r2*r2+g2*g2+b2*b2));
Ну а для набора пикселов можно посчитать среднее по таким расстояниям.
Строка с минимальным расстоянием и будет искомой.


Название: Re: Найти позицию картинки в картинке
Отправлено: Dodge от Ноябрь 04, 2007, 13:14
Да, мой способ работает через раз (((
А твой я что-то реализовал но оно вообще не правильно показывает...
Можешь проверить и скинуть примерчик?
Ок, во вторник скину.


Название: Re: Найти позицию картинки в картинке
Отправлено: Racheengel от Ноябрь 06, 2007, 01:52
Мда, вот сколько сижу на форуме, а проблем с распознаванием образов еще никто не поднимал...


Название: Re: Найти позицию картинки в картинке
Отправлено: Alex03 от Ноябрь 06, 2007, 08:27
pakulo Лучшеб саму задачу описал.

ИМХО тут или упрощённая задачка - типа задания студенту.
Или кривой способ решения более сложной задачи (типа распознавания штрихкода).


Название: Re: Найти позицию картинки в картинке
Отправлено: pakulo от Ноябрь 07, 2007, 00:34
А чего тут задачу описывать, я ж описал уже? :)
Задачу не студенту, а для личной программки, мне нужно склеить две картинки.
Одна картинка верхняя часть объекта, вторая нижняя, картинки порезанные (т.е. была одна фотка и она разрезанная, но не на пополам, каждому своя часть)...
Вот и нужно их склеить... Я сделал так как я описал, смотрю где больше пикселей одинаковых туда и леплю картинку, пока работает...
Но тут проблема, когда фотка какой-то объект на белом фоне скажем...


Название: Re: Найти позицию картинки в картинке
Отправлено: Tonal от Ноябрь 07, 2007, 11:12
Тогда просто создаёшь картинку суммарной высотой, сверху выводишь верхнюю, снизу нижнюю.
В чём проблема?
Или ты чего-то недообъяснил? :-)