получить очки от изображения - PullRequest
0 голосов
/ 03 февраля 2011

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

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

Ответы [ 2 ]

3 голосов
/ 03 февраля 2011

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

1 голос
/ 03 февраля 2011

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

Если ширина изображения 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))) для красного пикселя.

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

...