本文是作者随笔,附带学习的注释:
主要函数:输入是矩阵图像(例如512*512的单通道图像),返回方式是形参返回
void ClustFCM(cv::InputArray image, cv::OutputArray U,cv::OutputArray obj_fcn, cv::OutputArray center,int cluster_n, float * option)
{//输出:
//center----聚类中心 2x1的矩阵
//U----隶属度矩阵 矩阵
//obj_fcn----目标函数值矩阵
Mat data = image.getMat();
int data_n = data.rows;//样本数
int in_n = data.cols;//特征维度
int expo = option[0]; //隶属度矩阵U的指数
int max_iter = option[1]; // 最大迭代次数
float min_impro = option[2]; // 隶属度最小变化量, 迭代终止条件
int display = option[3]; // 每次迭代是否输出信息标志
initfcm(cluster_n, data_n, U); //输出U,初始化隶属度矩阵(子函数1)
Mat obj_fcn_begin = Mat::zeros(max_iter, 1, CV_32F);//初始化目标函数矩阵