Найти угол на изображении с низким разрешением (шахматная доска) - PullRequest
0 голосов
/ 11 января 2019

Мне нужна помощь с определением угла. Я напечатал шахматную доску и создал изображение этой шахматной доски с веб-камерой. Проблема в том, что веб-камера имеет низкое разрешение, поэтому она не находит все углы. Так что я увеличил количество искомых углов. Теперь он находит все уголки, но разные для одного и того же угла. Все точки хранятся в матрице, поэтому я не знаю, какой элемент зависит от какой точки. (Я не могу использовать функцию шахматной доски, потому что функция не доступна в моей версии Matlab) В настоящее время я использую функцию угла Matlab. Мой вопрос: Можно ли искать экстремумы всех облаков точек, чтобы получить 1 очко за каждый угол? Или есть идея, что я мог сделать? -> Пожалуйста, смотрите прикрепленное фото Спасибо за вашу помощь! enter image description here

1 Ответ

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

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

Вы можете попробовать две разные вещи:

  1. Проверьте в программе сбора данных вашей веб-камеры, можете ли вы отключить сжатие или перейти на сжатие без потерь
  2. Работая с уже имеющимся изображением, вы можете попытаться смягчить влияние сжатия, преобразовав изображение в двоичную форму с помощью простой операции пороговой обработки (что в случае шахматной доски не будет даже означать потерю информации, поскольку изображение по сути является двоичным ).

В случае, если вы хотите перейти к варианту 2) Я бы предложил сделать следующие шаги. Давайте предположим, что переменная, хранящая ваше изображение, называется img

  • посмотрите на распределение значений серого, используя, например, imhist работает следующим образом: imhist(img)
  • В идеале вы должны увидеть чистое бимодальное распределение без перекрытия. Выберите значение интенсивности I в середине двух пиков
  • Затем просто преобразуйте в двоичную форму, назначив img(img<I) = 0; img(img>I) = 255 (при условии, что img имеет тип uint8).
  • Затем снова запустите угловой алгоритм и посмотрите, исчезли ли выбросы
...