Как стереть область, ограниченную отрезком и блоком цветов? - PullRequest
4 голосов
/ 13 апреля 2011

Учитывая изображение ниже:

enter image description here

Положение A и B известно, остальная часть изображения - только необработанные данные пикселей (только красные и белые пиксели). Какой алгоритм я могу использовать, чтобы стереть часть справа от AB?

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Вам нужно нарисовать линию от A до B, а затем начать заливку на одном из красных пикселей справа от линии.

1 голос
/ 13 апреля 2011

Наличие двух точек определяет линию.Уравнение линии разделяет пиксели, которые должны быть удалены.Если вы хотите удалить точки так, чтобы новая граница плавно повторяла кривую фигуры, вам нужно каким-то образом интерполировать границу фигуры (на основе информации о других точках от границы).Эта интерполяция должна проходить через две черные точки.Теперь, если у вас есть интерполяция, вы можете рассчитать кривую интерполяции между двумя черными точками и установить белые точки справа от кривой.Я могу предложить использовать как минимум еще одну точку на кривой и использовать некоторую кубическую сплайн-интерполяцию .

РЕДАКТИРОВАТЬ: на основе вашего комментария.

Тогда алгоритм прост: Удерживайте указатель, который начинается с нижней точки (A) и перемещается вдоль границы (A '), пока не достигнет другой точки.Это может быть сделано путем проверки соседей текущего местоположения указателя и сравнения цветов.Теперь, когда вы перемещаете указатель, удалите линию красных точек от указателя (A ') до линии (синей), определенной между точками AB (зеленым).Есть позиция указателя, когда строка совпадает с другой черной точкой (например, A 'и B находятся в одной строке).Затем начните новый указатель с точки B таким же образом, обводя границу, и удалите красные пиксели между двумя указателями A 'и B'.

enter image description here

...