Author Topic: Помогите найти картинку  (Read 3606 times)

0 Members and 1 Guest are viewing this topic.

PasqualeAcosta

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

Vint

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


PasqualeAcosta

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

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Помогите найти картинку
« Reply #3 on: December 02, 2019, 04:07:09 PM »
Возможно поможет такое решение?
http://crapware.aidf.org/forum/index.php?topic=2409.msg15142#msg15142

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите найти картинку
« Reply #4 on: December 02, 2019, 05:59:55 PM »
Какие здесь примеры. На форуме, каждый второй скрипт это пример "подобного".

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


PasqualeAcosta

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Помогите найти картинку
« Reply #5 on: December 02, 2019, 06:30:50 PM »
Какие здесь примеры. На форуме, каждый второй скрипт это пример "подобного".

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

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Помогите найти картинку
« Reply #6 on: December 02, 2019, 06:33:28 PM »
по моему ники не зумируются, а это значит, что можно обойтись поиском белого пикселя и простой сортировкой
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

PasqualeAcosta

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите найти картинку
« Reply #8 on: December 03, 2019, 06:00:22 PM »
Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.

Code: (clickermann) [Select]
SUB(cleaning)
    UNDEFINE($clear)
    $a_scansize = ARRSIZE($a_scan)
    LOGWRITE("Найдено изображений: ", $a_scansize/2)

    FOR($j=0, $j < $a_scansize, 2)
        $X = $a_scan[$j]
        $Y = $a_scan[$j+1]

        $dead_zone = 0
        $clear_size = ARRSIZE($clear)
        FOR($m=0, $m < $clear_size, 2)
            $X_old = $clear[$m]
            $Y_old = $clear[$m+1]
            //LOGWRITE("X/X_old = ", $X, "/", $X_old)
            //LOGWRITE("ABS ", ABS($X - $X_old), "/", ($Y - $Y_old))
            IF((($Y - $Y_old) <= $dead_Y) & (ABS($X - $X_old) <= $dead_X))
                $dead_zone = 1
                $m = $clear_size + 10
                LOGWRITE("---Дубль!--- ", $X, "/", $Y)
            END_IF
        END_CYC
     
        IF($dead_zone = 0)
            ARRPUSH($clear, $X)
            ARRPUSH($clear, $Y)
            //LOGWRITE("добавляем ", $X, "/", $Y)
        END_IF
    END_CYC
END_SUB


// тестовые данные
$dead_X = 5
$dead_Y = 5
STRSEPARATE("22,60,29,62,25,64,200,66,210,66,205,88,207,88", ",", $a_scan)

// боевые данные
//$dead_X = 10
//$dead_Y = 10
//UNDEFINE($a_scan)
//SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, "pic.bmp", -1, 100)

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


LOGCLEAR
LOGWRITE("Мёртвая зона x/y ", $dead_X, "/", $dead_Y, " px")
LOGWRITE("")

LOGWRITE("Было")
FOR($i = 0, $i < ARRSIZE($a_scan), 2)
    LOGWRITE ($a_scan[$i], " : ", $a_scan[$i+1])
END_CYC
LOGWRITE("")

cleaning()

LOGWRITE("")
LOGWRITE("Стало")
FOR($i = 0, $i < ARRSIZE($clear), 2)
    LOGWRITE ($clear[$i], " : ", $clear[$i+1])
END_CYC

HALT

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

Quote
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
« Last Edit: December 03, 2019, 06:04:36 PM by Vint »


PasqualeAcosta

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Помогите найти картинку
« Reply #9 on: December 04, 2019, 12:52:10 PM »
Вот как отсеять например координаты в массиве которые находятся рядом в пределах 10 пикселей например и оставить только 1 пару.

Code: (clickermann) [Select]
SUB(cleaning)
    UNDEFINE($clear)
    $a_scansize = ARRSIZE($a_scan)
    LOGWRITE("Найдено изображений: ", $a_scansize/2)

    FOR($j=0, $j < $a_scansize, 2)
        $X = $a_scan[$j]
        $Y = $a_scan[$j+1]

        $dead_zone = 0
        $clear_size = ARRSIZE($clear)
        FOR($m=0, $m < $clear_size, 2)
            $X_old = $clear[$m]
            $Y_old = $clear[$m+1]
            //LOGWRITE("X/X_old = ", $X, "/", $X_old)
            //LOGWRITE("ABS ", ABS($X - $X_old), "/", ($Y - $Y_old))
            IF((($Y - $Y_old) <= $dead_Y) & (ABS($X - $X_old) <= $dead_X))
                $dead_zone = 1
                $m = $clear_size + 10
                LOGWRITE("---Дубль!--- ", $X, "/", $Y)
            END_IF
        END_CYC
     
        IF($dead_zone = 0)
            ARRPUSH($clear, $X)
            ARRPUSH($clear, $Y)
            //LOGWRITE("добавляем ", $X, "/", $Y)
        END_IF
    END_CYC
END_SUB


// тестовые данные
$dead_X = 5
$dead_Y = 5
STRSEPARATE("22,60,29,62,25,64,200,66,210,66,205,88,207,88", ",", $a_scan)

// боевые данные
//$dead_X = 10
//$dead_Y = 10
//UNDEFINE($a_scan)
//SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, "pic.bmp", -1, 100)

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


LOGCLEAR
LOGWRITE("Мёртвая зона x/y ", $dead_X, "/", $dead_Y, " px")
LOGWRITE("")

LOGWRITE("Было")
FOR($i = 0, $i < ARRSIZE($a_scan), 2)
    LOGWRITE ($a_scan[$i], " : ", $a_scan[$i+1])
END_CYC
LOGWRITE("")

cleaning()

LOGWRITE("")
LOGWRITE("Стало")
FOR($i = 0, $i < ARRSIZE($clear), 2)
    LOGWRITE ($clear[$i], " : ", $clear[$i+1])
END_CYC

HALT

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

Quote
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 все переваривает, если несколько цветов ))