java实现图片切割_【Java】K-means算法Java实现以及图像切割

本文介绍了如何使用Java实现K-means聚类算法,并展示了如何将其应用于图像切割。通过K-means算法将像素按颜色聚类,实现图像的颜色分割。文章提供了算法的详细步骤,包括数据初始化、距离计算、簇划分和中心更新。还给出了测试样例和图像处理的提示,强调了数据格式和处理顺序的重要性。
摘要由CSDN通过智能技术生成

1.K-means算法简述以及代码原型

总的来讲,k-means聚类须要下面几个步骤:

①.初始化数据

②.计算初始的中心点,能够随机选择

③.计算每一个点到每一个聚类中心的距离。而且划分到距离最短的聚类中心簇中

④.计算每一个聚类簇的平均值,这个均值作为新的聚类中心,反复步骤3

⑤.假设达到最大循环或者是聚类中心不再变化或者聚类中心变化幅度小于一定范围时,停止循环。

恩。原理就是这样,超级简单。可是Java算法实现起来代码量并不小。这个代码也不算是全然自己写的啦。也有些借鉴。我把k-means实现封装在了一个类里面,这样就能够随时调用了呢。

import java.util.ArrayList;

import java.util.Random;

public class kmeans {

private int k;//簇数

private int m;//迭代次数

private int dataSetLength;//数据集长度

private ArrayList dataSet;//数据集合

private ArrayList center;//中心链表

private ArrayList> cluster;//簇

private ArrayList jc;//误差平方和,这个是用来计算中心聚点的移动哦

private Random random;

//设置原始数据集合

public void setDataSet(ArrayList dataSet){

this.dataSet=dataSet;

}

//获得簇分组

public ArrayList> getCluster(){

return this.cluster;

}

//构造函数,传入要分的簇的数量

public kmeans(int k){

if(k<=0)

k=1;

this.k=k;

}

//初始化

private void init(){

m=0;

random=new Random();

if(dataSet==null||dataSet.size()==0)

initDataSet();

dataSetLength=dataSet.size();

if(k>dataSetLength)

k=dataSetLength;

center=initCenters();

cluster=initCluster();

jc=new ArrayList();

}

//初始化数据集合

private void initDataSet(){

dataSet=new ArrayList();

double[][] dataSetArray=new double[][]{ {8,2},{3,4},{2,5},{4,2},

{7,3},{6,2},{4,7},{6,3},{5,3},{6,3},{6,9},

{1,6},{3,9},{4,1},{8,6}};

for(int i=0;i

dataSet.add(dataSetArray[i]);

}

//初始化中心链表,分成几簇就有几个中心

private ArrayList initCenters(){

ArrayList center= new ArrayList();

//生成一个随机数列。

int[] randoms=new int[k];

boolean flag;

int temp=random.ne

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值