Итак...
Сначала - результаты
Сырое
В программе
Центр нанесен на оригинальную картинку
Как работает на текущий момент.
Нужно сфотографировать мишень максимально четко и без искажений - круги должны быть круглыми, линии - прямыми.
Затем фото нужно обработать в фотошопе. Чисто для собственного удобства - яркость, контраст (хотя я пользуюсь уровнями).
Хорошо бы уменьшить размер изображения где-то до 1500х1500 пикселов, плюс-минус... Не обязательно квадрат... Так просто быстрее будет работать.
Затем, для чистоты эксперимента - нужно уничтожить все цвета перейдя в черно-белый режим. Затем нужно вновь включить режим RGB и отметить цветом центр каждого попадания - строго одним пикселом. В примере используется цвет #00FF00 - чистый зеленый.
Изображение необходимо сохранить в формате RAW, при этом ОБЯЗАТЕЛЬНО нужно записать размер изображения в пикселах ХХХХ х YYYY. При сохранении заголовок следует указать нулевой, чередующийся порядок.
В этом формате изображение представляется просто как одна длинная сопля из байт. Каждые 3 байта - описывают соответственно красный, зеленый и синий цвета для одного пиксела. Таким образом моя программа, читая байты тройками - получает данные о цвете изображения попиксельно. Она тупо перебирает все пикселы в изображении, сравнивая из с искомым ключевым цветом. Когда обнаруживается совпадение то увеличивается счетчик попаданий, а также координаты этого пиксела приводятся с помощью масштабного коэффициента и заносятся в массив координат попаданий. В дальнейшем программа работает уже с этим массивом, а не с изображением.
На примере попаданий 181 шт, а всего пикселов 5 301 324. Совершенно понятно что массив из 181 элемента - обработать гораздо проще, чем переворошить пять миллионов элементов.
Когда массив координат попаданий заполнен - по нему в графической области размером 1000х1000 пикселов рисуются синие кружочки, символизирующие попадания.
Поскольку изображение анализируется слева направо сверху вниз - поиск горизонтальной линии центра не представляет труда. Необходимо просто использовать координату Y от попадания с номером, равным половине всех попаданий. (Округляем просто). Так строится горизонтальная линия центра.
Для построения вертикальной линии центра - попадания подсчитываются заново, но на этот раз строго слева направо. По достижении половины общего числа попаданий - берем координату "сработавшего" попадания и строим вертикальную линию.
Далее необходимо решить вопрос масштабного коэффициента для того, чтобы уметь переходить от пикселов к метрам. Перейдя к метрам - можно будет нанести трафарет 16- или 100- дольной мишени.
Затем останется только лишь математически описать условия для подсчета попаданий в различные доли. ИМХО - удобно будет использовать для этой цели полярные координаты.