数字图像处理---根据K均值聚类方法对图像灰度值进行分类和阈值化操作

本文介绍了如何利用K均值聚类方法对图像的灰度值进行分类和阈值化操作。首先概述了K均值聚类算法的原理,接着详细阐述了算法步骤,并提供了C语言版的代码实现。通过实例展示了算法如何将灰度值有效地区分为三类,为后续的图像处理提供了基础。最后,提到了如何根据聚类结果计算阈值。
摘要由CSDN通过智能技术生成

注意:现在用的这个方法,只对灰度值有断续的情况下,处理的结果会很好。因为只考虑一维数据就很好。如果是二维的,我们则还是需要加上权值信息,即每个灰度对应的数量,这就是另一种算法。我们会在后面的文章继续提到。

一、K均值聚类方法概述:

K均值聚类算法是先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

即其目的是,各个样本与所在类均值的误差平方和达到最小(这也是评价K-means算法最后聚类效果的评价标准)。

二、算法介绍:
(1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;

(2 ) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;

(3) 重新计算每个(有变化)聚类的均值(中心对象) 三、代码(附说明)

(4)循环(2)到(3)直到每个聚类不再发生变化为止

三、代码(C语言版)

// KmeanImage.cpp : 定义控制台应用程序的入口点。
//作者:Serious_Tanx
//时间:2016.11.01
//题目:根据K均值方法对图像灰度值进行分类
//作用:可以根据聚类后的值,来计算得出后续二值化的阈值

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>

#define k 3  //分成3类

using namespace std;

struct Tuple //结构体的好处不用多说
{
     float gray;
};

void KMeans(vector<Tuple>tuples);
Tuple getMeans(vector<Tuple>cluster);
float getVar(vector<Tuple>clusters[],Tu
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值