![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| CynicRus |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 31.5.2012 Репутация: 2 Всего: 5 |
Приветствую уважаемых форумчан. Решаю задачу поиска заранее определенного объекта на изображении. Изображение может быть как большим, так и не очень(скриншот экрана или окна). Для этих целей использую импровизацию на тему Deformable Template Model алгоритма.
Класс точки на изображеннии определен как:
Где x,y: точка на изображении(0,0 для главной), Color - ожидаемый цвет, Tolerance - допустимое отклонение цвета, AreaSize - размер площади точки в пикселях. Соответственно базовый класс состоит из главной DTMточки, и подчиненного ей массива DTMТочек. В массиве поля x,y содержат смещение по x и y до главной точки. Ищу это по изображению следующим образом:
И всё это работает, объект на изображении находится. При этом на небольших изображениях - работает довольно сносно, а вот на изображениях по крупнее , особенно если там не один объект - работает очень задумчиво. Собственно вопрос в том - каким образом оптимизировать поиск такой структуры на изображениях различных размеров? PS: TDTMBitmap - просто объект, в одном из полей которого содержится массив с реальным битмапом в виде array of TRGBTriple. PPS: как оно работает. создаём модель для искомого участка на изображении: ![]() и по этой модели уже проводим поиск, в результате находим искомое. Ну или не находим, хотя если модель верно составлена, то объект находится всегда. Это сообщение отредактировал(а) CynicRus - 17.9.2014, 10:15 |
||||
|
|||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
Разбить код на подпрограммы и произвести профилирование.
Выявить что именно потребляет время. Хотя бы будет понятно, какой код оптимизировать. В идеале на каждый поиск надо запускать отдельный поток. Так же целесообразно использовать в качестве ключа не одну точку, а матрицу 3*3 (или 2*2). Это сократит количество "ложных" ветвлений. Если предполагается искать несколько объектов, то также целесообразно преобразовать битмап в массив. Добавлено через 1 минуту и 39 секунд ScanLine вызывается на каздой итерации двойного цикла... жирновато как то.... -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |