Author Topic: Вариант для значительного ускорения поиска картинок (даже огромных).  (Read 3609 times)

0 Members and 2 Guests are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
 пришла сегодня в голову такая идейка. ведь как работает обычный ифпикчуреин - ищет первый пиксель, потом сравнивает второй, если совпадает то далее, если нет то с начала, ну короче все кому интересно примерно понимают. это дает возможность использовать процент совпадения (и игнорируемый цвет). но если процент совпадения 100%, то зачем столько лишних действий?

 принцип мысли - ищем первый пиксель искомой картинки и проверяем ранее проверенный PXLXOR этой картинки, если нет, то далее со следующим найденным первым пикселем.

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




разрешение искомой области 1366 х 768. на вин10 сложновато с его вездесущим сглаживанием.

где ищем:


что ищем (100х100 !!!):


как ищем:
Code: (clickermann) [Select]
GETSCREEN
// 3497629 цвет первого пикселя

SCANPXL($ARR, 0,0, $_xmax,$_ymax, 3497629)
print(ARRSIZE($ARR)/2, " возможных координат")


$t = $_ms
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100)
   print("нашли по старинке в координатах ",$_return1," х ", $_return2)
END_IF
print("за ",$_ms - $t, " ms.")
print(" ")
waitms(500)


$t = $_ms
$size = ARRSIZE($ARR)
FOR($i=0,$i<$size,2)
   IF(PXLXOR($ARR[$i],$ARR[$i+1],$ARR[$i]+100,$ARR[$i+1]+100) = 16584102) //16584102 - ранее подсчитаная контр сумма
      print("нашли по новинке в координатах ",$ARR[$i]," х ", $ARR[$i+1])
      $i=$size
   END_IF
END_CYC
print("за ",$_ms - $t, " ms.")
print(" ")

halt

результат:
Code: (html5) [Select]
22:49:10 2 возможных координат
22:49:13 нашли по старинке в координатах 640 х 352
22:49:13 за 4251 ms.
22:49:13 
22:49:14 нашли по новинке в координатах 640 х 352
22:49:14 за 23 ms.
22:49:14 

в 180 раз быстрее!!!

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