2图像分割预处理——K-means 算法
K-means算法是一种以距离为基准的聚类算法,它相似程度的评价指标是距离,也就是
说如果两个研究对象的距离越近,它们的相似程度就越大;反之,则越小。K-means算法
"利用了函数求极值的方法来得到迭代运算的调整准则,它的相似度测度是欧氏距离,它采
用误差平方和准则函数作为聚类的准则函数。假设要把一个有n个元素的样本分为m个类
,m<n,K-means算法描述如下:
/*
// CloudToDepth.cpp : Defines the entry point for the console application.
//
//#include “stdafx.h”
#pragma comment(lib,“User32.lib”)
#include <tchar.h>
#include <boost/thread/thread.hpp>
#include <pcl\visualization\pcl_plotter.h>
#include <pcl/common/common_headers.h>
#include <pcl/range_image/range_image.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/png_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/visualization/range_image_visualizer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/common/float_image_utils.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/filters/radius_outlier_removal.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/filters/conditional_removal.h>
#include <pcl/common/common.h>
#include <pcl/io/io.h>
#include <pcl/console/parse.h>
#include <pcl/range_image/range_image_planar.h>
typedef pcl::PointXYZ PointType;
//void displayCloudImage(const pcl::PointCloudpcl::PointXYZ::ConstPtr &points);
//void setViewerPose(pcl::visualization::PCLVisualizer& viewer, const Eigen::Affine3f& viewer_pose);
//定义参数
float angular_resolution_x = 0.3f;
float angular_resolution_y = angular_resolution_x;
float angularResolution = (float)(1.0f * (M_PI / 180.0f));//角分辨率是1度,也就是说由相邻像素表示的光束相差一弧度
float maxAngleWidth = (float)(360.0f * (M_PI / 180.0f));
float maxAngleHeight = (float)(180.0f * (M_PI / 180.0f));//模拟的范围传感器有一个完整的360度全景图
Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);//传感器的位置定义了虚拟传感器的6 DOF位置,它的原点是滚动=俯仰=偏航=0。
pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;//x朝向右,y向下,z轴是向前的,另一种选择是激光框架,x面向前方,y向左,z向上。
float noiseLevel = 0.00;//对于噪声,噪声是0,范围图像是使用普通的z缓冲区创建的
float minRange = 0.0f;// minRange >0 ,所有更近的点都将被忽略
int borderSize = 0;//边界大小>0,边界将会在裁剪时留下一个未被观察到的点的边界。
int _tmain(int argc, _TCHAR* argv[])
{