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

资源简介

基于VS2013平台opencv3 的模糊C均值,可以任意分成你想要的类别数

资源截图

代码片段和文件信息

#include “all.h“

double FCMeans(int *firstint* result int clusterNum int cols int rows int featureNum int m_Value)
{
int sampleNum = cols * rows;
double j_before = 0;
double j_now = 0;
int flag = 0;//隶属度是否为1的标识符。
//创建来记录隶属度值
//Mat u_account= Mat::zeros(sampleNum clusterNum CV_64FC1);
vectoru_account;
u_account.resize(sampleNum*clusterNum);

//创建聚类中心并随机初始化
vectorcenter;
center.resize(clusterNum*featureNum);
for (int i = 0; i < clusterNum; i++)
{
for (int j = 0; j < featureNum; j++)
center[i*featureNum + j] = (255.0 / clusterNum) *(i + 1);
}



//创建距离,并初始化
vectordistance;
distance.resize(sampleNum*clusterNum);
for (int i = 0; i < sampleNum; i++)//遍历像素点的循环
{
for (int k = 0; k < clusterNum; k++)//聚类循环
{
double dis = 0;
for (int n = 0; n < featureNum; n++)
{
double temp = 0;
temp = center[k*featureNum + n] - first[i*featureNum + n];
dis = dis + temp *temp;
}
distance[i*clusterNum + k] = dis;
}

}


j_before = 0;
j_now = 0;



//*********************************开始聚类
for (int i = 0; i < MAX; i++)
{

j_before = j_now;//记录上一次循环损失函数的值
j_now = 0;   //初始化这一次损失函数的值
//计算隶属度矩阵
for (int i = 0; i < sampleNum; i++)
{
flag = 0;
double top = 0;//每一个点的隶属度的分子
double base = 0;//每一个点的隶属度的分母;计算每个类的隶属度时分母不变
int k_save = 0;//记录距离为0的类别

for (int k = 0; k < clusterNum; k++)
{
double now_dis = 0;//记录当前当前坐标与聚类中心的距离
now_dis = distance[i*clusterNum + k];
if (now_dis != 0)
{
base = base + pow(1.0 / now_dis 1.0 / (m_Value - 1));//算分母的值
}
else
{
flag = 1;
k_save = k;
break;
}
}

if (flag == 1)
{
for (int k = 0; k < clusterNum; k++)
{
u_account[i*clusterNum + k] = 0;
}
u_account[i*clusterNum + k_save] = 1;
}
else
{
for (int k = 0; k < clusterNum; k++)
{
top = pow(1.0 / distance[i*clusterNum + k] 1.0 / (m_Value - 1));//算分子的值
u_account[i*clusterNum + k] = top / base;
}
}
}

//修改新的聚类中心;聚类中心是featureNum个维度;clusterNum个;不同维度的分母值是一样的,分子不一样
for (int k = 0; k < clusterNum; k++)//类别遍历
{
double base = 0;  //每个维度的分母是一样的,所以在这里初始化,而且下面也只计算了一遍
for (int j = 0; j < featureNum; j++)
{
double top = 0;
for (int i = 0; i < sampleNum; i++)
{
double a = 0;//分子分母的相似部分
a = pow(u_account[i*clusterNum + k] m_Value);/////
if (j == 0) //只计算一次分母值
{
base = base + a;
}

top = top + a * first[i*featureNum + j];
}
center[k*featureNum + j] = top / base;
}
}

//更新距离数组,同时计算j的值
for (int i = 0; i < sampleNum; i++)//遍历像素点的循环
{
for (int k = 0; k < clusterNum; k++)//聚类循环
{
double dis = 0;
for (int n = 0; n < featureNum; n++)
{
double temp = 0;
temp = center[k*featureNum + n] - first[i*featureNum + n];
dis = dis + temp *temp;
}
dista

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-26 17:25  模糊C均值\
     目录           0  2018-05-17 10:02  模糊C均值\Debug\
     文件       91648  2018-05-21 14:04  模糊C均值\Debug\模糊C均值.exe
     文件     1869104  2018-05-21 14:04  模糊C均值\Debug\模糊C均值.ilk
     文件     1944576  2018-05-21 14:04  模糊C均值\Debug\模糊C均值.pdb
     目录           0  2018-05-21 14:04  模糊C均值\模糊C均值\
     文件    15400960  2018-05-21 14:10  模糊C均值\模糊C均值.sdf
     文件         985  2018-05-15 16:01  模糊C均值\模糊C均值.sln
     文件       22528  2018-05-21 14:10  模糊C均值\模糊C均值.v12.suo
     文件      104428  2018-03-28 17:21  模糊C均值\模糊C均值\1.jpg
     文件       31140  2018-05-16 13:15  模糊C均值\模糊C均值\12.jpg
     文件       10253  2018-05-16 17:03  模糊C均值\模糊C均值\123.jpg
     文件      136876  2018-05-17 10:46  模糊C均值\模糊C均值\1234.jpg
     文件         894  2018-05-21 14:04  模糊C均值\模糊C均值\all.h
     目录           0  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\
     文件        2587  2018-05-16 09:36  模糊C均值\模糊C均值\Debug\copy.obj
     文件      252043  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\fcm.obj
     文件      206392  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\main.obj
     文件      666624  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\vc120.idb
     文件      954368  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\vc120.pdb
     文件        3359  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.log
     目录           0  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.tlog\
     文件        1840  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.tlog\cl.command.1.tlog
     文件       44436  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.tlog\CL.read.1.tlog
     文件        2520  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.tlog\CL.write.1.tlog
     文件        1004  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.tlog\link.command.1.tlog
     文件        1236  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.tlog\link.read.1.tlog
     文件         490  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.tlog\link.write.1.tlog
     文件         183  2018-05-21 14:04  模糊C均值\模糊C均值\Debug\模糊C均值.tlog\模糊C均值.lastbuildstate
     文件        4912  2018-05-21 14:02  模糊C均值\模糊C均值\fcm.cpp
     文件        1379  2018-05-21 14:03  模糊C均值\模糊C均值\main.cpp
............此处省略2个文件信息

评论

共有 条评论