2011-02-02 3 views
0

Я хочу извлечь очки из данного изображения. изображение показано ниже. enter image description hereПолучить очки с изображения

Точки, которые я хочу, - это зеленая верхняя точка и красная точка. Я попробовал сравнение пикселей по пикселям, но он слишком медленный. Мне нужен лучший алгоритм. Каковы ваши предложения?

ответ

3

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

1

Сравнение пикселей по пикселям будет трудно превзойти. Вы можете значительно улучшить скорость поиска на зеленой линии, используя метод «разделяй и властвуй».

Если ширина изображения равна x, а его высота равна y, выполните поиск по всем пикселям, расположенным по адресу x={0...x},y={y/4,3*y/4} для зеленого пикселя. Если ни один не найден, найдите все пиксели вдоль x={x/4,3*x/4},y={0...y}. Как только вы найдете зеленый пиксель p в координатах px,py, выполните поиск в двух пиксельной окрестности этого пикселя, которая находится дальше от центра изображения (то есть {px,py+1},{px+1,py}, если p находится в верхнем правом углу, {px,py-1},{px-1,py}, если p находится в нижнем левом углу , {px,py+1},{px-1,py} если p находится в верхнем левом углу, или {px,py-1},{px+1,py} если p находится в правом нижнем квадранте. Обновление p быть первым зеленым соседа вы найдете. не итерацию до p имеет не более зеленые соседи. в худшем случае этот алгоритм ~O(2*(x+y)+(1/2)*max(x,y)) ~= O(2.5*max(x,y)) ~= O(x), который намного лучше, чем O(x*y), если вы просто проверяете значение цвета для каждой пары {x,y}.

Нахождение красной точки будет дорогостоящим, хотя и не менее дорогостоящим, чем O(x*y), так как единственный способ повысить стоимость поиска одного красного пикселя будет за счет подвыборки изображения (O(x*y)), а затем поиск всего изображения (теперь O(sqrt(x*y))) для красного пикселя.

Мне нравится идея par, однако, если две точки всегда находятся на одном и том же расстоянии от центра изображения, тогда вы можете просто искать пиксели, которые падают вдоль окружности этого радиуса!