Какие есть методы (алгоритмы) обнаружения объекта на изображении?
- Решил я написать программу для подсчёта объектов на изображении. Долго не думая и ничего не читая по теме - "нарисовал"
алгоритм (см. комментарии), а затем написал программу, и теперь понял, что я в общем-то написал инструмент "выделение" (как в фотошопе) в цветовом диапазоне. ..
Если говорить о простых вычислениях, то программа справляется со своей задачей. Поигравшись с настройками "размер области" и "цветовой диапазон" - можно что-то считать... Однако, данное решение нельзя применять
в полевых условиях. Возникает задача: Определять форму, а затем - объект. То есть, непосредственно в коде для подсчёта объектов нужно параметризировать геометрию.
private void countAreas(HashMap<Integer, int[]> forms) {
int unit=0, x1, x2, y1, y2;
int [] position;
int offset=3; // x > на 2-3 пикселя; - часто встречаемая разница для простой геометрии.
for (int i = 0; i<forms.size(); i++) {
position = forms.get(i);
x1 = position[0];
y1 = position[1];
x2 = position[2];
y2 = position[3];
if(area!=-1) {
int x = x2-x1;
int y = y2-y1;
// Квадрат или прямоугольник с ориентацией по вертикали: (y+offset)>=x
if(x>=area && x>=2 (y+offset)>=x) {
unit++;
count.setText("C O U N T : "+unit);
//рисуем прямоугольник
drawAreas(x1,x2,y1,y2);
}
}
}
}
Результат работы программы для простых вычислений выгляди вот так:
Если говорить о более сложных вычислениях - начинается "каламбур". Возникает потребность более точно определять форму и классифицировать объект. И чем больше углубляешься в тему данного вопроса, те больше "пропасть" в понимании. Что только не пишут в интернете: "компьютерное зрение", "машины опорных векторов", "нейросети" и т.д. и т.п. В реальности - всё это набор математических выражений определения формы (геометрии), которую нужно описывать в своих методах классификации объекта. В связи с этим возникает
вопрос: Какие есть методы (алгоритмы) обнаружения объекта на изображении?