Входные данные: это набор объектов, природа появления которых - есть суть процесса выделения контура конкретного тела на изображении. На промежуточном шаге мы имеем прямоугольник, который описывает этот контур - здесь как-раз рассчитываются величины, которые являются параметрами объектов, подлежащих кластеризации, а именно:
- h, высота прямоугольника;
- (x,y), центр масс (коррдинаты);
- σ, среднеквадратичное отклонение, как мера, показывающая "как далеко" отдельно взятая точка может находится от центра масс, находясь при этом в пределах текущего контура.
Что сделано: разбил точки на кластеры следующим образом: берем первую точку p(i), запоминаем соответствующее ей значение σ(i), смотрим следующую точку p(i+1) - если выполянется условие abs( p(i) - p(i+1) ) <= σ(i) - то считаем, что эти точки можем объеденить в один кластер, иначе - делаем вывод, что появилась точка из другого кластера и т.д.
Что сделано, но работает не так, как хотелось бы: при повторной обработке точек, выяснилось, что есть точки, которые не принадлежат ни одному из кластеров. Тут следует уточнить, как я задавал параметры кластеру - я считал среднее значение соответствующих параметров для всех точек, которые должны были войти в кластер, т.е.:
double h_mean = 0.0f;
for( std::size_t i = 0; i < _cluster.size(); ++i )
h_mean += _cluster[i].height();
h_mean /= _cluster.size();
Мне кажется, я делаю неправильно/не совсем верно - подскажите, пожалуйста, как сделать правильно/усовершенствовать этот алгоритм.
(В тегах C++ - потому как пишу на плюсах, прошу не ругаться)
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники