Обработка изображений: определение трапеции из списка точек - PullRequest
0 голосов
/ 29 января 2019

Проблема довольно проста: у меня есть следующее изображение.

enter image description here

Мой список точек - это белые пиксели, они хранятся втекстура.Какой будет лучший и, возможно, самый эффективный метод определения трапеции, которую они определяют?(Выпуклая форма с 4 углами, не обязательно имеет углы 90 градусов).

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

1 Ответ

0 голосов
/ 29 января 2019

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

В примерах, сопровождающих * 1005, есть отличная демонстрация* CImg , которая сама по себе является довольно красивой, простой библиотекой C ++ для обработки изображений только для заголовков.Я снял это здесь, показывая, как обновляется область памяти справа, когда я перемещаю мышь сначала вдоль горизонтального стержня клетки, а затем вниз по вертикальному стержню.Вы можете видеть голоса, поданные в аккумуляторе, и что точка в аккумуляторе постепенно нарастает до пика ярко-белого:

enter image description here


Вы также можете поэкспериментировать с ImageMagick в командной строке без необходимости писать или компилировать какой-либо код, см. Пример здесь . ImageMagick устанавливается в большинстве дистрибутивов Linux и доступен для macOS и Windows.

Итак, используя ваш образ:

magick trapezoid.png -background black -fill red -hough-lines 9x9+10 result.png

enter image description here

Или, если вам нужна основная информация, которая идентифицирует 4 строки:

magick trapezoid.png -threshold 50% -hough-lines 9x9+10 mvg:

# Hough line transform: 9x9+10
viewbox 0 0 784 561
# x1,y1 x2,y2 # count angle distance
line 208.393,0 78.8759,561  # 14 13 312
line 0,101.078 784,267.722  # 28 102 460
line 0,355.907 784,551.38  # 14 104 722
line 680.493,0 550.976,561  # 12 13 772

Если вы посмотрите на числа, следующие сразу после хеша (#), то есть 14, 28, 14, 12 это голосов , которые соответствуют количеству точек / точек в вашем исходном изображении вдоль этой линии.Вот почему я установил threshold на 10, в части 9x9+10, а не на 40 в примере ImageMagick , с которым я связан.Я имею в виду, что у вас относительно мало точек в каждой строке, поэтому вам нужен более низкий порог.


Обратите внимание, что преобразование Хафа также доступно в других пакетах, таких как OpenCV .

...