资源简介
基于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的图像配准程序
- VC++直方图均衡化显示图像及直方图
- Opencv+VC6.0实现摄像头视频的监控
- opencv入门教程(C++版)
- 简单的几何图形识别程序源代码
- 虹膜分割 Iris Segmentation C++和opencv实现
- C++(OPENCV)摄像头标定代码带图片O
- 基于Opencv的交通流量实时检测
- 棋盘格标定图
- opencv视觉定位,C++编写的
- opencv循迹
- 任意曲线(S型等)调整图像色调,对
- Visual C++利用OpenCV对图像进行人脸识别
- 运用opencv的c++图像单点相关系数匹配
- VS2008 opencv MFC 计算米粒的个数及最大
- 14_车牌识别系统.zip
- 13_车型识别系统.zip
- 人脸跟踪基于opencv
- surf特征提取与匹配
- SRAD算法C++实现
- MFC+Opencv 摄像头保存为图像和视频
- TLD 全C++代码 OpenCV3.0.0 VS2013 工程文件
- [源码&文档] 基于OpenCV的室内目标跟踪
- 基于特征点匹配的视频稳像
- 制作自己的MFC MDI OPENCV程序框架
- 基于opencv开发的谷歌小恐龙的小游戏
- OpenCV图像模糊程序 by浅墨
- Opencv和vc++6.0一些常用图像处理算法程
- c++开发ocx入门实践三--基于opencv的简易
- opencv+c++实现人脸识别
评论
共有 条评论