Если вам интересно, то исходник ImageSearch написан на с++ и лежит в интернете в свободном доступе (если не можете найти- я вам могу его сбросить в личку), посмотрите сами алгоритм. Мне это не надо пока что, я не смотрел.
Алгоритм поиска картинки я делал в AutoIt. Обычным попиксельным перебором: программа ищет на скриншоте экрана пиксель (слева направо, сверху вниз), который с допустимым отклонением по цвету совпадает с цветом пикселя верхнего левого угла искомой картинки; нашла -> проверяет следующий пиксель и т.д.- при полном совпадении выдает результат - картинка найдена; совпадения нету -> ищет следующий пиксель, который по цвету совпадает с пикселем левого верхнего угла картинки. Первый пиксель искал с помощью библиотеки FastFind (а это очень нерационально, потому что она каждый раз проверяет все пиксели на экране, те что проверила при прошлой проходке- проверяет опять). Из картинки, которую надо найти, перед поиском вытаскивал в массив цвета пикселей. Для поиска с отклонением по цвету надо сравнивать отдельно каждую компоненту цвета. Вместе со скриншотом поиск на экране занимал у меня максимум 0,3с при таком нерациональном алгоритме. Если весь алгоритм реализовать на с++ или другом компилируемом яп, то скорость поиска поднимется на порядок - и будет+- как у ImageSearch. Это от меньше милисекунды до нескольких десятков милисекунд. Если при таком алгоритме поиска вы будете искать картинку черного прямоугольника с 1 белым пикселем в правом нижнем углу этой картинки на экране, где все пиксели тоже черные, а искомая картинка в правом нижнем углу экрана - ну то вы будете сам себе злобный буратино и заставите программу проверить кучу раз все пиксели)))) может тогда и секунда набежит)) И, конечно, можно сделать поиск получше, чем просто перебор всего подряд.