Я для поиска таких маркеров (правда, без внешнего полукольца) начинаю с того, что для каждой точки строю "окружность" с центром в этой точке, состоящую из 20 точек (радиус может варьироваться) и проверяю, насколько она симметрична. Если средний квадрат разностей яркостей симметричных точек заметно меньше дисперсии, то это кандидат на маркер. Потом проверяю на подобие (беру окружность вдвое меньшего радиуса). Если оба критерия прошли - идёт проверка уже по площадям (опять же, проверяется симметрия, самоподобие и однородность белого и чёрного). Границы приходится распознавать только для определения центра с субпиксельной точностью (достигается точность 1/10 пикселя).
К сожалению, процесс довольно медленный. Особенно, если заранее размер маркера неизвестен, и приходится проверять разные масштабы.
Про яркостную границу можно предложить прогнать алгоритм, основанный на выделении границ, для нескольких порогов яркости. Какой-нибудь да сработает. Но как описать и быстро распознать ситуацию "при сканировании пройден центр маркера", я ещё не придумал.