Автор Тема: Помогите найти картинку  (Прочитано 177 раз)

0 Пользователей и 1 Гость просматривают эту тему.

PasqualeAcosta

  • Освоившийся
  • **
  • Сообщений: 25
    • Просмотр профиля
Помогите найти картинку
« : Декабрь 02, 2019, 12:00:31 am »
Вечер добрый! Перепробовал и вырезать по разному и работал с колормодами. Но никак не получается точно определять красные шары. Суть в том что пиксели немного пляшут, плюс в зависимости от удаления объект становится меньше...
Скрин во вложении. Может попробовать искать по уровням, но там тоже иконка при удалении становится меньше.
Подскажите, может будут еще какие то варианты, интересные идеи?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3353
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #1 : Декабрь 02, 2019, 10:56:55 am »
Искать какой нибудь из оттенков красного. Скорее всего в COLORMODE 6. Считать количество этого цвета в области.
Проверять область правее, где соседний маркер-кружок, считать в нём серые ИЛИ жёлтые пиксели. Так мы отсекаем другие места где достаточно красного (стрелки, гребень огромного крокодила). Это при условии что нам известны все эти доп цвета.
А ещё лучше сделать наоборот: Искать круги с жёлтым/серым и слева зону проверять на наличие нужного красного.


PasqualeAcosta

  • Освоившийся
  • **
  • Сообщений: 25
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #2 : Декабрь 02, 2019, 03:30:20 pm »
Искать какой нибудь из оттенков красного. Скорее всего в COLORMODE 6. Считать количество этого цвета в области.
Проверять область правее, где соседний маркер-кружок, считать в нём серые ИЛИ жёлтые пиксели. Так мы отсекаем другие места где достаточно красного (стрелки, гребень огромного крокодила). Это при условии что нам известны все эти доп цвета.
А ещё лучше сделать наоборот: Искать круги с жёлтым/серым и слева зону проверять на наличие нужного красного.
Случаем нету примера чего то подобного, может кто то уже реализовывал похожее (на форуме чет пока не нахожу)? Т.к. с нуля с ума сойду такое реализовывать.
Я могу уменьшить процент совпадения и найти все что нужно, но как и написано попадается много лишнего, или дублируются координаты (-+ 1 пиксель). Не могу понять как реализовать дополнительные отборы в массиве.

Ramzesia

  • Активный участник
  • ***
  • Сообщений: 237
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #3 : Декабрь 02, 2019, 04:07:09 pm »
Возможно поможет такое решение?
http://crapware.aidf.org/forum/index.php?topic=2409.msg15142#msg15142

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3353
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #4 : Декабрь 02, 2019, 05:59:55 pm »
Какие здесь примеры. На форуме, каждый второй скрипт это пример "подобного".

А чтоб пример был рабочим, нужно знать что может появиться в этих кружках? какие цвета. Как там с вариацией цвета, а то потом выяснится как всегда, что там всё переливается в анимации.
Скрины от большого до малого размера какие бывают. Ну и все скрины естественно не jpeg


PasqualeAcosta

  • Освоившийся
  • **
  • Сообщений: 25
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #5 : Декабрь 02, 2019, 06:30:50 pm »
Какие здесь примеры. На форуме, каждый второй скрипт это пример "подобного".

А чтоб пример был рабочим, нужно знать что может появиться в этих кружках? какие цвета. Как там с вариацией цвета, а то потом выяснится как всегда, что там всё переливается в анимации.
Скрины от большого до малого размера какие бывают. Ну и все скрины естественно не jpeg
Никакая анимация на круги не влияет. Влияет только удаление и соответственно размер.
На скрине как раз они с разной удаленностью.
Прикладываю еще пару скринов в колормоде 6 и формат бмп24 для наглядности
Вложить не могу, размер не дает, можно по ссылке посмотреть https://yadi.sk/d/rg83vWnR2NAEPQ

Космич

  • Активный участник
  • ***
  • Сообщений: 229
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #6 : Декабрь 02, 2019, 06:33:28 pm »
по моему ники не зумируются, а это значит, что можно обойтись поиском белого пикселя и простой сортировкой
«Если я не понимаю, зачем нужен этот код, значит этот код не нужен.»

PasqualeAcosta

  • Освоившийся
  • **
  • Сообщений: 25
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #7 : Декабрь 02, 2019, 07:02:07 pm »
по моему ники не зумируются, а это значит, что можно обойтись поиском белого пикселя и простой сортировкой
Зумируются( Анимации глаз по крайней мере точно не видит, но пиксили даже при равном размере все равно немного пляшут. В общем задница какая то.
Получается иногда сделать так что б все находило при низком уровне совпадения, но выходит так что б влижних кругах скрипт находит картинку сразу много раз с разницей в 1-2 пикселя по координатам. Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3353
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #8 : Декабрь 03, 2019, 06:00:22 pm »
Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.

Код: Clickermann
  1. SUB(cleaning)
  2.    UNDEFINE($clear)
  3.    $a_scansize = ARRSIZE($a_scan)
  4.    LOGWRITE("Найдено изображений: ", $a_scansize/2)
  5.  
  6.    FOR($j=0, $j < $a_scansize, 2)
  7.        $X = $a_scan[$j]
  8.        $Y = $a_scan[$j+1]
  9.  
  10.        $dead_zone = 0
  11.        $clear_size = ARRSIZE($clear)
  12.        FOR($m=0, $m < $clear_size, 2)
  13.            $X_old = $clear[$m]
  14.            $Y_old = $clear[$m+1]
  15.            //LOGWRITE("X/X_old = ", $X, "/", $X_old)
  16.            //LOGWRITE("ABS ", ABS($X - $X_old), "/", ($Y - $Y_old))
  17.            IF((($Y - $Y_old) <= $dead_Y) & (ABS($X - $X_old) <= $dead_X))
  18.                $dead_zone = 1
  19.                $m = $clear_size + 10
  20.                LOGWRITE("---Дубль!--- ", $X, "/", $Y)
  21.            END_IF
  22.        END_CYC
  23.  
  24.        IF($dead_zone = 0)
  25.            ARRPUSH($clear, $X)
  26.            ARRPUSH($clear, $Y)
  27.            //LOGWRITE("добавляем ", $X, "/", $Y)
  28.        END_IF
  29.    END_CYC
  30. END_SUB
  31.  
  32.  
  33. // тестовые данные
  34. $dead_X = 5
  35. $dead_Y = 5
  36. STRSEPARATE("22,60,29,62,25,64,200,66,210,66,205,88,207,88", ",", $a_scan)
  37.  
  38. // боевые данные
  39. //$dead_X = 10
  40. //$dead_Y = 10
  41. //UNDEFINE($a_scan)
  42. //SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, "pic.bmp", -1, 100)
  43.  
  44. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  45.  
  46.  
  47. LOGCLEAR
  48. LOGWRITE("Мёртвая зона x/y ", $dead_X, "/", $dead_Y, " px")
  49. LOGWRITE("")
  50.  
  51. LOGWRITE("Было")
  52. FOR($i = 0, $i < ARRSIZE($a_scan), 2)
  53.    LOGWRITE ($a_scan[$i], " : ", $a_scan[$i+1])
  54. END_CYC
  55. LOGWRITE("")
  56.  
  57. cleaning()
  58.  
  59. LOGWRITE("")
  60. LOGWRITE("Стало")
  61. FOR($i = 0, $i < ARRSIZE($clear), 2)
  62.    LOGWRITE ($clear[$i], " : ", $clear[$i+1])
  63. END_CYC
  64.  
  65. HALT

Результат в массиве $clear,

Цитировать
18:03:16 Мёртвая зона x/y 5/5 px
18:03:16
18:03:16 Было
18:03:16 22 : 60
18:03:16 29 : 62
18:03:16 25 : 64
18:03:16 200 : 66
18:03:16 210 : 66
18:03:16 205 : 88
18:03:16 207 : 88
18:03:16
18:03:16 Найдено изображений: 7
18:03:16 ---Дубль!--- 25/64
18:03:16 ---Дубль!--- 207/88
18:03:16
18:03:16 Стало
18:03:16 22 : 60
18:03:16 29 : 62
18:03:16 200 : 66
18:03:16 210 : 66
18:03:16 205 : 88
« Последнее редактирование: Декабрь 03, 2019, 06:04:36 pm от Vint »


PasqualeAcosta

  • Освоившийся
  • **
  • Сообщений: 25
    • Просмотр профиля
Re: Помогите найти картинку
« Ответ #9 : Декабрь 04, 2019, 12:52:10 pm »
Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.

Код: Clickermann
  1. SUB(cleaning)
  2.    UNDEFINE($clear)
  3.    $a_scansize = ARRSIZE($a_scan)
  4.    LOGWRITE("Найдено изображений: ", $a_scansize/2)
  5.  
  6.    FOR($j=0, $j < $a_scansize, 2)
  7.        $X = $a_scan[$j]
  8.        $Y = $a_scan[$j+1]
  9.  
  10.        $dead_zone = 0
  11.        $clear_size = ARRSIZE($clear)
  12.        FOR($m=0, $m < $clear_size, 2)
  13.            $X_old = $clear[$m]
  14.            $Y_old = $clear[$m+1]
  15.            //LOGWRITE("X/X_old = ", $X, "/", $X_old)
  16.            //LOGWRITE("ABS ", ABS($X - $X_old), "/", ($Y - $Y_old))
  17.            IF((($Y - $Y_old) <= $dead_Y) & (ABS($X - $X_old) <= $dead_X))
  18.                $dead_zone = 1
  19.                $m = $clear_size + 10
  20.                LOGWRITE("---Дубль!--- ", $X, "/", $Y)
  21.            END_IF
  22.        END_CYC
  23.  
  24.        IF($dead_zone = 0)
  25.            ARRPUSH($clear, $X)
  26.            ARRPUSH($clear, $Y)
  27.            //LOGWRITE("добавляем ", $X, "/", $Y)
  28.        END_IF
  29.    END_CYC
  30. END_SUB
  31.  
  32.  
  33. // тестовые данные
  34. $dead_X = 5
  35. $dead_Y = 5
  36. STRSEPARATE("22,60,29,62,25,64,200,66,210,66,205,88,207,88", ",", $a_scan)
  37.  
  38. // боевые данные
  39. //$dead_X = 10
  40. //$dead_Y = 10
  41. //UNDEFINE($a_scan)
  42. //SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, "pic.bmp", -1, 100)
  43.  
  44. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  45.  
  46.  
  47. LOGCLEAR
  48. LOGWRITE("Мёртвая зона x/y ", $dead_X, "/", $dead_Y, " px")
  49. LOGWRITE("")
  50.  
  51. LOGWRITE("Было")
  52. FOR($i = 0, $i < ARRSIZE($a_scan), 2)
  53.    LOGWRITE ($a_scan[$i], " : ", $a_scan[$i+1])
  54. END_CYC
  55. LOGWRITE("")
  56.  
  57. cleaning()
  58.  
  59. LOGWRITE("")
  60. LOGWRITE("Стало")
  61. FOR($i = 0, $i < ARRSIZE($clear), 2)
  62.    LOGWRITE ($clear[$i], " : ", $clear[$i+1])
  63. END_CYC
  64.  
  65. HALT

Результат в массиве $clear,

Цитировать
18:03:16 Мёртвая зона x/y 5/5 px
18:03:16
18:03:16 Было
18:03:16 22 : 60
18:03:16 29 : 62
18:03:16 25 : 64
18:03:16 200 : 66
18:03:16 210 : 66
18:03:16 205 : 88
18:03:16 207 : 88
18:03:16
18:03:16 Найдено изображений: 7
18:03:16 ---Дубль!--- 25/64
18:03:16 ---Дубль!--- 207/88
18:03:16
18:03:16 Стало
18:03:16 22 : 60
18:03:16 29 : 62
18:03:16 200 : 66
18:03:16 210 : 66
18:03:16 205 : 88

Большое спасибо. Думаю этот вариант будет намного быстрее работать, пошел тестить. А то пришлось убирать массивы, делать через цикл if_picture.. и каждый раз перекрашивать пиксели. На удивление даже все заработало, но секунды 3 иногда 5 все переваривает, если несколько цветов ))