0

我想对我获得的数据应用 kmeans 聚类。在这里,我附上一个链接。请检查。

http://arxiv.org/ftp/arxiv/papers/0910/0910.1849.pdf

从这个链接中提供的算法,我已经完成了 3.2 的第 4 点,即块截断算法。我不知道如何进一步进行。请帮忙。下面给出了我实现的代码。它在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);
    }

}
4

1 回答 1

0

你需要阅读更多的文学作品。特别是:

  • 色彩时刻
  • k-均值聚类

如果不阅读此文献,您将无法理解您链接的文章。

于 2013-11-04T12:56:39.837 回答