资源简介
基于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\li
文件 1236 2018-05-21 14:04 模糊C均值\模糊C均值\Debug\模糊C均值.tlog\li
文件 490 2018-05-21 14:04 模糊C均值\模糊C均值\Debug\模糊C均值.tlog\li
文件 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个文件信息
相关资源
- 人脸识别(opencv_facedetect_v4l2)
- 基于opencv的模板匹配代码
- opencv图片扫描以及校正
- opencv手部轮廓识别以及轨迹识别
- opencv2 3D标定.cpp
- 基于opencv漫水填充算法综合
- opencv激光中心线的提取
- OpenCV Computer Vision Application Programming
- 基于图割的图像分割OpenCV+MFC实现
- 识别魔方颜色
- opencv版俄罗斯方块源码
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放
- 粒子滤波器+目标跟踪的C++实现,VS2
- 张平OpenCV算法精讲基于python和C++教材
- 虹膜识别开源代码OSIRIS4.1基于opencv
- Sift特征点提取与匹配opencv库
- YCbCr、混合高斯以及YCbCg肤色检测模型
- 光流法代码
- OpenCV打开摄像机显示在MFC窗口工程源
- 使用c++读取图像到二维矩阵
- 三维点云的圆柱面拟合
- MFC+OPENCV摄像机标定程序
- 基于特征脸的人脸识别MFC+OpenCV
- FCM模糊C均值的C++实现
- opencv图像处理MFC
- OPENCV人脸检测加角点检测并输出坐标
- FillHole.rar
- 道路提取算法 c++ opencv
- PCA代码实现详解
- opencv卡尔曼滤波
川公网安备 51152502000135号
评论
共有 条评论