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

> findimage в LUA
apaul
сообщение 25.1.2022, 14:46
Сообщение #1


**

Neophyte
Сообщений: 36
Регистрация: 19.8.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.051



Подскажите пожалуйста синтаксис findimage в LUA чтобы искать не с экрана, а в памяти, предварительно сохранив его getimage-ем. Шаблоны для поиска тоже находятся в памяти, загруженные через loadimage.
Заранее благодарен за помощь )
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
sutra
сообщение 12.2.2022, 14:25
Сообщение #2


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



инфо
Код

Начну с ключей для каналов.
Ключи из строчных символов определяют нижнюю границу значений каналов пикселей для формирования шаблона.
Ключи из ПРОПИСНЫХ символов определяют верхнюю границу значений каналов.
Если верхняя граница не указана, она по умолчанию равна нижней.
То есть условие b=200 идентично условию b=200, B=200.
Для ключей, определяющих разность между каналами пикселей, большее значение по умолчанию равно 255.
То есть условия rg=200 и rg=200,RG=255 идентичны (канал RED должен быть больше канала GREEN не менее чем на 200 единиц).

Ключ fgr определяет какие пиксели, соответствующие условию, будут фоновыми, а какие искомыми.
Если ключ fgr определён и не имеет значения false ( if fgr==true ) - это значит, что пиксели соответствующие условию
будут являться искомыми и попадут в шаблон. Например: {{fgr=true, b=0, B=255}} Все пиксели картинки попадут в
шаблон, то есть будет проверяться каждый пиксель картинки функцией поиска. Почему? Да потому, что любой пиксель
удовлетворяет условию.
Если ключ fgr НЕ определён - это значит что пиксели соответствующие условию будут считаться фоновыми и НЕ попадут
в шаблон. Например при условии: {{b=0, B=255}} - шаблон будет пустым, так как ВСЕ пиксели картинки будут считаться фоновыми.
Пример: мы создали картинку закрасив в исходной все "ненужные, лишние" пиксели чёрным цветом RGB=(0,0,0) - они должны быть
фоном. Оставили скажем 5 пикселей красного цвета с RGB=(255,0,0) и 10 пикселей зелёного цвета с RGB=(0,255,0).
Условие формирования шаблона должно быть таким {{r=0,g=0}} , то есть, если пиксели имеют значения каналов RED И GREEN равными нулю,
они будут считаться фоновыми и не попадут в шаблон.
Предположим, что зелёных пикселей в образе НАМНОГО больше чем красных. И чтобы повысить скорость поиска мы хотим сначала
анализировать красные пиксели и только потом зелёные.
Варианты условий для такой задачи:
  1) { {r=255,fgr=true}, {g=255,fgr=true} }
       сначала в шаблон попадают красные пиксели, а потом зелёные пиксели - самый простой и логичный вариант,
       чтобы не запутаться в условиях.
  2) { {r=255,fgr=true}, {r=0,g=0} }
       сначала в шаблон попадают красные пиксели, а потом ВСЕ пиксели у которых канал  RED  ИЛИ  GREEN  НЕ равен нулю,
       то есть оставшиеся зелёные пиксели.
  3) { {r=255,fgr=true}, {g=0} }
       сначала в шаблон попадают красные пиксели, а потом ВСЕ пиксели у которых канал  GREEN  НЕ равен нулю,
       то есть оставшиеся зелёные пиксели.
Во втором и третьем варианте на первый взгляд нарушена логика. НО, УСЛОВИЕ №2 не влияет на первое.
Если пиксель уже в шаблоне, следующие условия не могут его исключить из шаблона и не могут изменить его параметры.


Ключ dev - это допустимое плюс минус отклонение каналов RGB в абсолютных единицах.
Ключ acc - это допустимое плюс минус отклонение каналов RGB в процентах (относительные значения).
Эти два ключа формируют параметры для функции FindImage и не влияют на создание массива искомых пикселей в шаблоне картинки.
Они определяют допустимые отклонения каналов RGB пикселей образа, от каналов RGB соответствующих пикселей шаблона.
Почему они присутствуют в функции CreateFindArray ? Исключительно для уменьшения математики и увеличения скорости
поиска функцией FindImage.


Рассмотрим на конкретном примере. Допустим искомый пиксель шаблона имеет RGB=(100,200,50).
Задаём параметр отклонения каналов: dev=10.
Если на экране (образе) поиска, в требуемой позиции, находится пиксель с RGB от (90,190,40) до (110,210,60), то есть плюс минус 10
единиц от значений каналов пикселя шаблона, то такой пиксель считается приемлемым - поиск даст положительный результат.

Ключ acc ... Я уже пожалел, что сделал его в таком виде, то есть acc=90 - это допустимое отклонение каналов на 10% (100-90),
наверное лучше было задавать его как acc=10, но как сделал, так сделал. Хотя подправить - раз плюнуть.

Итак для рассматриваемого пикселя, при acc=90 на экране будут искаться пиксели с RGB от (90,180,45) до (110,220,55),
то есть плюс минус 10% для каждого канала.

Если одновременно заданы оба ключа: dev=10, acc=90
на экране будут искаться пиксели с RGB от (80,170,35) до (120,230,65), то есть плюс минус 10% и 10 единиц.

Резюме: чем больше dev и (или) чем меньше acc тем шире поиск (мягче).

Зачем нужен ключ acc, если можно однозначно задать любое отклонение ключом dev?
Дело в том, что пиксели картинок "плавают" по вполне определённым правилам. Условно, если пиксель был красным,
то он и будет красным, а не зелёным. А это значит, что каналы пикселей изменяются (плавают) пропорционально,
то есть по идее как раз и нужен параметр acc который и задаёт пропорции в процентах.
Тогда возникает резонный вопрос, а зачем тогда нужен dev?

Рассмотрим на конкретном примере, например мы ищем красный пиксель картинки, в шаблоне он имеет RGB=(200,0,0).
На экране нас устроит красный пиксель и с RGB=(255,0,0) и с RGB=(200,20,10).
Если мы зададим отклонение даже хоть в 40% (acc=60), каналы GREEN и BLUE пикселя шаблона не будут иметь
отклонения, так как нуль на что не умножай, останется нулём.
Поэтому ключ dev нужен для создания диапазона отклонений для каналов RGB с низкими значениями.

Поэтому повторяюсь, если нет 100% уверенности, что пиксель имеет значения каналов не менее чем 70-100 единиц, то
использование ключа dev обязательно. Как уже говорил вполне приемлемое сочетание два 2 к одному:
{dev=5,acc=90}; {dev=10,acc=80}; {dev=12,acc=76} и т.п.

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

Ну и надо помнить, что границы объектов подвержены максимальным искажениям, поэтому пиксели границ нужно
исключать из шаблона поиска. Подразумеваются границы реальных картинок, а не изображения символов и т.п..
Либо при поиске FindImage использовать параметр похожести картинки sim, но он может сильно замедлить поиск,
особенно при больших зонах поиска, поэтому использовать его надо в крайнем случае, когда иначе картинка не ищется.


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
apaul   findimage в LUA   25.1.2022, 14:46
sutra   Нашёл где-то на задворках вариант использования фи...   26.1.2022, 13:34
apaul   Нашёл где-то на задворках вариант использования ф...   26.1.2022, 20:23
Madeus   Вот рабочий вариант поиска чисел   26.1.2022, 22:29
apaul   Вот рабочий вариант поиска чисел Может быть, но ...   26.1.2022, 23:26
apaul   Помогите, что-то никак не взлетает, и не пойму куд...   27.1.2022, 0:33
sutra   Я давно не работаю со стандартом, могу ошибаться. ...   27.1.2022, 11:11
sutra   По поводу буферов. Ну их размер и их количество Вы...   27.1.2022, 11:31
apaul   Буфер - он на то и буфер, он нужен только для заг...   27.1.2022, 14:57
sutra   Если честно, я не знаю как бы я обходился без свои...   27.1.2022, 11:49
sutra   Трафарет - это массив данных, определяемый Вашей п...   27.1.2022, 17:00
sutra   Грубо говоря, резюмируя. Создавайте сколько угодно...   27.1.2022, 17:22
apaul   Создавайте сколько угодно так называемых трафарет...   6.2.2022, 16:07
sutra   Вы первый, кто заинтересовался моей "кухней...   7.2.2022, 9:42
sutra   Скачал себе свой же файл. Да, я там прилично перед...   7.2.2022, 10:26
sutra   Вроде состряпал мало-мальски ответы на вопросы. Ну...   8.2.2022, 14:15
apaul   Вроде состряпал мало-мальски ответы на вопросы. Н...   8.2.2022, 15:51
sutra   Да не вопрос - спрашивай. Постараюсь ответить. Уда...   8.2.2022, 17:23
sutra   В качестве рекомендации. Иногда может казаться что...   9.2.2022, 10:37
apaul   Еще раз спасибо за модуль - впечатления сугубо пол...   11.2.2022, 13:06
sutra   Сорри, как обычно, чего в голову взбрело, то и пиш...   11.2.2022, 12:52
apaul   sutra, продолжаю эксперименты с Вашим модулем. С ч...   12.2.2022, 15:12
sutra   Что можно ещё добавить. Правильно подобрать отклон...   12.2.2022, 15:17
Cockney   Что можно ещё добавить. Правильно подобрать откло...   13.2.2022, 18:40
apaul   sutra, столкнулся с непонятным для меня поведение...   13.2.2022, 14:36
sutra   Конечно лучше бы взглянуть на код, прежде чем дава...   14.2.2022, 10:42
sutra   Я когда только начинал реализовывать идентификацию...   14.2.2022, 10:54
apaul   Дадите код - дам рекомендации. На мой взгляд с по...   14.2.2022, 12:41
sutra   ОК. Скачал, сейчас посмотрю что к чему. Я даже не ...   14.2.2022, 13:03
apaul   Сразу на вскидку. Глянул на шрифт. Уверяю 100% вс...   14.2.2022, 13:21
sutra   Всё верно виновник - это смещения. Вот сижу и смот...   14.2.2022, 13:50
sutra   Вроде с финдом всё нормально. Насколько я понял, т...   14.2.2022, 14:12
apaul   делает смещение поиска вниз и другие цифры уже не...   14.2.2022, 15:26
sutra   Ваш шрифт имеет абсолютно стандартное выравнивание...   14.2.2022, 14:27
sutra   Ну а конкретно в вашем частном случае, либо жестко...   14.2.2022, 14:37
sutra   Я понял. Я конечно не знаю всех нюансов что и где ...   14.2.2022, 16:52
apaul   Наверное Вам есть смысл сначала найти картинку си...   14.2.2022, 19:39
sutra   Всё-таки попробую дать рекомендации, которые на ...   15.2.2022, 15:49
apaul   sutra , большое спасибо за рекомендации! Очень...   19.2.2022, 13:34
sutra   Рад, что смог помочь. И да, если фон однороден, то...   19.2.2022, 18:08


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

 

- Текстовая версия | Версия для КПК Сейчас: 9.7.2025, 2:25
Designed by Nickostyle