Извлечение пикселей области в форме многоугольника из изображения в Java - PullRequest
0 голосов
/ 14 марта 2019

У меня есть изображение с плавающей точкой, хранящееся в массиве с плавающей точкой 2d.

Имеется графический интерфейс, который отображает изображение (в оттенках серого).Одним щелчком мыши я могу точно указать и показать исходное значение пикселя.

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

Это то, что я имел в виду.

  1. Создайте многоугольник, используя модифицированный алгоритм рисования линий Брезенхэма.Отметьте и сохраните точки edge для каждой линии сканирования в HashMap<ScanPoint, List<EdgePoint>> aka HashMapList
  2. . Определите точки, изогнутые внутри (где внутренний угол> 180 градусов).(Чтобы добавить их дважды в HashMapList, чтобы они могли быть такими)
  3. Используйте алгоритм заливки полигонов линий сканирования, чтобы выделить все внутренние точки.

Теперь у меня проблема с2-й пункт.Я не могу провести различие между изображением ниже Polygon1, где мне нужно было бы дважды добавить «вогнутую» точку в HashMapList для выполнения задачи.Потому что он создает две отдельные области (одна из которых заканчивается, а другая начинается в той же точке.)

и изображении ниже Polygon2, где мне не нужнодобавьте его дважды в HashMapList, потому что он не создает отдельных областей.

Как различить эти два пикселя / точки?


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

1 Ответ

1 голос
/ 16 марта 2019

То, чего вы хотели достичь, - это алгоритм сканирования строчной многоугольной линии (SLPF). Как вы можете видеть на этих двух изображениях, которые вы разместили, единственная разница - это ориентация формы w.r.t. пространство экрана. Но внутренний угол является неотъемлемой чертой формы, которая не имеет отношения к тому, как пространство размещается в глобальной координате.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...