☰
C++ Mean Shift算法
2026/11/2 1:14:00 网站建设 项目流程
原理

每个样本点最终会移动到核概率密度的峰值,移动到相同峰值的样本点属于同一种颜色

关键代码
template <typename PointType> inline typename MeanShift<PointType>::PointsVector MeanShift<PointType>::meanshift(const PointsVector &points, double kernel_bandwidth) const{ const double EPSILON_SQR = _meanshift_epsilon*_meanshift_epsilon; std::vector<bool> stop_moving(points.size(), false); PointsVector shifted_points = points; double max_shift_distance; Point point_new; do { max_shift_distance = 0; for(int i=0; i<shifted_points.size(); i++) { if (!stop_moving[i]) { shift_point(shifted_points[i], points, kernel_bandwidth, point_new); // 带宽收缩后的值 double shift_distance_sqr = euclidean_distance_sqr(point_new, shifted_points[i]); // 取收缩后的峰值 if(shift_distance_sqr > max_shift_distance){ max_shift_distance = shift_distance_sqr; } if(shift_distance_sqr <= EPSILON_SQR) { stop_moving[i] = true; } shifted_points[i] = point_new; } } } while (max_shift_distance > EPSILON_SQR); return shifted_points; }
效果

参考

深入剖析Mean Shift聚类算法原理-腾讯云开发者社区-腾讯云

GitHub - facontidavide/Meanshift: Implementation of MeanShift algorithm (including Qt Demo)


创作不易,小小的支持一下吧!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询