фильтрация данных программно с действительно базовым c языком программирования - PullRequest
0 голосов
/ 20 января 2020

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

Камера возвращает, сколько предметов она нашла, и где она их нашла, и прибл. высота найденного элемента (+ -5% из-за масштабирования)

Я начинаю с a для l oop, где il oop над каждой моделью и получаю вышеупомянутые значения, которые должны быть сохранены в переменных.

Поскольку это проприетарный язык программирования, у меня есть доступ только к строковому, целочисленному, двойному и многомерному массивам этих переменных. Поэтому первое, что я сделаю, это сохраню для каждого найденного элемента значения в многомерном массиве:

type1 - x/y - height
type1 - x/y - height
type3 - x/y - height

и т. Д. Теперь, когда у меня есть этот массив, мне нужно удалить все результаты, которые не являются правдоподобными на основании этих критериев:

1) поскольку имеется только 2 стека, x / y найденных ящиков должно быть в пределах некоторых полей. Сами ящики можно расположить с некоторым допуском, поэтому я бы усреднил значения ящиков слева и усреднил значения ящиков справа ... каждый ящик, находящийся за пределами этой позиции +/- некоторый запас равен перезаписывается 0 ... Это легко, и я могу это сделать.

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

3) случается, что распознается неправильный ящик в месте, которое не имеет смысла. например, если есть два маленьких ящика один над другим, общая высота составляет 10 см. Бывает, что на верхнем ящике он распознает средний ящик (7 см). Это не может быть ошибкой, потому что не хватает 3 см, и ящик будет парить в воздухе ..

Вопросы:

  • как бы вы подошли к проблеме (2 ) с таким ограниченным языком программирования?
  • как бы вы подошли к проблеме (3), отслеживая, где начинается / заканчивается каждый ящик, имея в виду, что существует некоторая толерантность (+ -5%) и ящики не могут плавать в воздухе? ​​

РЕДАКТИРОВАТЬ:

моя нынешняя идея о первой проблеме будет что-то вроде этого: скажем, изображение имеет высоту 2000 пикселей ... Я должен сделать массив длиной 200. каждый слот покрывает 10 пикселей. Когда я нахожу ящик, я устанавливаю области пикселей, где ящик равен 1. Если я нахожу ящик, который расположен там, где массив уже равен 1, я выбрасываю его ... Это имеет смысл или это плохая идея?

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