Я хочу применить кластеризацию kmeans к данным, которые я получил. Здесь я прикрепляю ссылку. Пожалуйста, проверьте.Группировка изображений с использованием KMean
http://arxiv.org/ftp/arxiv/papers/0910/0910.1849.pdf
Из алгоритма, представленный в этой ссылке, я сделал до 4 пункта 3.2, т.е. алгоритма усечения блока. Я не знаю, как двигаться дальше. Пожалуйста, помогите. Код до тех пор, где я был реализован, приведен ниже. Он находится в java.
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.ArrayList;
public class BlockTruncation{
public static void main(String[] args) throws IOException
{
BufferedImage bufImgs = ImageIO.read(new File("C://Users/Chandni/chandni's pics/2013-04-06-1449.jpg"));
ArrayList<Integer> RH=new ArrayList<Integer>();
ArrayList<Integer> RL=new ArrayList<Integer>();
ArrayList<Integer> GH=new ArrayList<Integer>();
ArrayList<Integer> GL=new ArrayList<Integer>();
ArrayList<Integer> BH=new ArrayList<Integer>();
ArrayList<Integer> BL=new ArrayList<Integer>();
/* ArrayList RL[]=new int[15];
int GH[]=new int[15];
int GL[]=new int[15];
int BH[]=new int[15];
int BL[]=new int[15];*/
int red[]=new int[(bufImgs.getWidth()* bufImgs.getHeight())];
int green[]=new int[(bufImgs.getWidth()* bufImgs.getHeight())];
int blue[]=new int[(bufImgs.getWidth()* bufImgs.getHeight())];
int c=0;
for(int r=0;r<bufImgs.getWidth();r++)
{
for(int s=0;s<bufImgs.getHeight();s++)
{
int color = bufImgs.getRGB(r, s);
red[c]=(color>>16) & 0xFF;
green[c]=(color>>8) & 0xFF;
blue[c]=color & 0xFF;
c++;
}
}
double mean_pix[]=new double[3];
mean_pix[0]=mean_no(red);
mean_pix[1]=mean_no(green);
mean_pix[2]=mean_no(blue);
for(int k=0;k<mean_pix.length;k++)
{
System.out.println(mean_pix[k]);
}
for(int p=0;p<red.length;p++)
{
if(red[p]<mean_pix[0])
{
/*for(int q=0;q<RL.length;q++)
{
RL[q]=red[p];
}*/
RL.add(red[p]);
}
else
{
/* for(int q=0;q<RL.length;q++)
{
RH[q]=red[p];
}*/
RH.add(red[p]);
}
}
System.out.println("RH :");
{
for(int g:RH)
{
System.out.println(g);
}
}
System.out.println("RL :");
{
for(int g:RL)
{
System.out.println(g);
}
}
}
static double mean_no(int[] col)
{
double sum=0;
for(int rgb:col)
{
sum+=rgb;
}
return (sum/col.length);
}
}
Пункт 3.2.5 фактически относится к этапам, описанным в 3.3: K-Средство * является * алгоритмом кластеризации. Я думаю, вам нужно занять некоторое время, чтобы прочитать эту тему. – Matt