• 大小: 8.95MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-10
  • 语言: C/C++
  • 标签: FCM  C+  

资源简介

模糊C均值的C++实现,有很详细的代码解释,运行需要配置OpenCV340,各种踩坑,希望大家学习愉快,附带理论地址,代码配合公式能够更好的学习哦https://blog.csdn.net/qq_41828351/article/details/88402605

资源截图

代码片段和文件信息

// FCM.cpp : 此文件包含 “main“ 函数。程序执行将在此处开始并结束。
//

#include “pch.h“
#include 
#include 

void myFCMeans(float* pSamples int* pClusterResult int clusterNum int sampleNum int featureNum int m_Value);

int main()
{
#define MAX_CLUSTERS 5
//CvScalar color_tab[MAX_CLUSTERS];
cv::Scalar color_tab[MAX_CLUSTERS];
IplImage* img = cvCreateImage(cvSize(500 500) IPL_DEPTH_8U 3);
CvRNG rng = cvRNG(cvGetTickCount());
cv::Point ipt;

//color_tab[0] = CV_RGB(255 0 0);
color_tab[0] = cv::Scalar(255 0 0);
color_tab[1] = CV_RGB(0 255 0);
color_tab[2] = CV_RGB(100 100 255);
color_tab[3] = CV_RGB(255 0 255);
color_tab[4] = CV_RGB(255 255 0);


int i k;
int clusterNum = cvRandInt(&rng) % MAX_CLUSTERS + 2; //至少有两类
int sampleNum = cvRandInt(&rng) % 1000 + 100; //至少100个点
int feaNum = 2;  //特征维度
CvMat* sampleMat = cvCreateMat(sampleNum 1 CV_32FC2);
/* generate random sample from multigaussian distribution */
//产生高斯随机数
//随机生成样本多元高斯分布
//样本总数为sample_count 类别总数为cluster_count
//样本矩阵为points先按类别分成cluster_count份 每一份数据的个数为sample_count/cluster_count
//然后按类别随机矩阵填充样本矩阵第一类填充矩阵的0~sample_count/cluster_count行
//第二类填充样本矩阵的sample_count/cluster_count~sample_count/cluster_count*2行以此类推直到填充满所有矩阵每一类的样本个数是一样的
for (k = 0; k < clusterNum; k++)
{
CvPoint center;
int topIndex = k * sampleNum / clusterNum;  //填充的索引
int bottomIndex = (k == clusterNum - 1 ? sampleNum : (k + 1)*sampleNum / clusterNum);

CvMat* localMat = cvCreateMatHeader(bottomIndex - topIndex 1 CV_32FC2);
center.x = cvRandInt(&rng) % img->width;
center.y = cvRandInt(&rng) % img->height;
//返回数组在一定跨度的行
//points为输入数组point_chunk返回数组
//开始行为k*sample_count/cluster_count
//结束行为 当k== cluster-1时 为 第samplecount行 否则为(k+1)*sample_count/cluster_count
cvGetRows(sampleMat localMat topIndex bottomIndex 1); //此函数不会给localMat分配空间不包含bottomIndex,其实localMat已经和得到的几行数据进行了绑定
//point_chunk输出数组CV_RAND_NORMAL分布类型为正态分布或者高斯分布
//cvScalar(center.xcenter.y00)随机数的平均值
// cvScalar(img->width/6img->height/600)如果是正态分布它是随机数的标准差
cvRandArr(&rng localMat CV_RAND_NORMAL
cvScalar(center.x center.y 0 0)
cvScalar(img->width*0.1 img->height*0.1 0 0));   //在这里随机就相当于在给sampleMat赋值
}

// shuffle samples 混乱数据
for (i = 0; i < sampleNum / 2; i++)
{
CvPoint2D32f* pt1 = (CvPoint2D32f*)sampleMat->data.fl + cvRandInt(&rng) % sampleNum;
CvPoint2D32f* pt2 = (CvPoint2D32f*)sampleMat->data.fl + cvRandInt(&rng) % sampleNum;
CvPoint2D32f temp;
CV_SWAP(*pt1 *pt2 temp);
}

float* pSamples = new float[sampleNum * feaNum];  //大小等于特征维度乘以样本数
int* pClusters = new int[sampleNum];
for (i = 0; i < sampleNum; i++)
{
//feaNum=2   将二维数据作为数据集
pSamples[i*feaNum] = (cvGet2D(sampleMat i 0)).val[0];
pSamples[i*feaNum + 1] = (cvGet2D(sampleMat i 0)).val[1];
}
cvReleaseMat(&sampleMat);  //数据集制作完毕,释放内存

cvZero(img);  //初始化图片
for (i = 0; i < sampleNum; i++)
{
//fe

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-03-05 16:28  FCM\.vs\
     目录           0  2019-03-05 16:28  FCM\.vs\FCM\
     目录           0  2019-03-11 16:18  FCM\.vs\FCM\v15\
     文件       26624  2019-03-11 16:18  FCM\.vs\FCM\v15\.suo
     文件    22171648  2019-03-11 16:18  FCM\.vs\FCM\v15\Browse.VC.db
     目录           0  2019-03-05 20:53  FCM\.vs\FCM\v15\ipch\
     文件      327680  2019-03-05 16:28  FCM\.vs\FCM\v15\ipch\29c714a186fa55df.ipch
     目录           0  2019-03-07 15:40  FCM\.vs\FCM\v15\ipch\AutoPCH\
     文件      327680  2019-03-11 16:18  FCM\.vs\FCM\v15\ipch\cfd589cfd835b35a.ipch
     文件        1422  2019-03-05 16:28  FCM\FCM.sln
     目录           0  2019-03-07 14:42  FCM\FCM\
     文件       32356  2019-03-06 14:56  FCM\FCM\clusters.jpg
     文件       10378  2019-03-07 14:42  FCM\FCM\FCM.cpp
     文件        8538  2019-03-05 16:31  FCM\FCM\FCM.vcxproj
     文件        1151  2019-03-05 16:28  FCM\FCM\FCM.vcxproj.filters
     文件         165  2019-03-05 16:28  FCM\FCM\FCM.vcxproj.user
     文件       28914  2019-03-11 16:18  FCM\FCM\origin.jpg
     文件         200  2019-03-05 16:28  FCM\FCM\pch.cpp
     文件         639  2019-03-05 16:28  FCM\FCM\pch.h
     目录           0  2019-03-05 16:31  FCM\FCM\x64\
     目录           0  2019-03-11 16:17  FCM\FCM\x64\Debug\
     文件         613  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.log
     文件      437079  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.obj
     文件     2031616  2019-03-05 16:31  FCM\FCM\x64\Debug\FCM.pch
     目录           0  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.tlog\
     文件        1490  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.tlog\CL.command.1.tlog
     文件       30106  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.tlog\CL.read.1.tlog
     文件         990  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.tlog\CL.write.1.tlog
     文件         206  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.tlog\FCM.lastbuildstate
     文件        1330  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.tlog\link.command.1.tlog
     文件        2644  2019-03-11 16:17  FCM\FCM\x64\Debug\FCM.tlog\link.read.1.tlog
............此处省略9个文件信息

评论

共有 条评论