Mostrar características de uma imagem

Boa noite,

Se alguém puder nos ajudar agradecemos, precisamos concluir um trabalho da faculdade, onde após abrir uma imagem o usuário deverá clicar em classificar. Uma vez clicado no botão classificar o código deve selecionar as características(ex. cor do cabelo, cor da roupa) dessa imagem com base num arquivo .arff e mostrar em campos jtext

Segue abaixo o codigo, caso alguém posso nos alguma umas dicas de como fazer.
public class TelaResultados extends javax.swing.JFrame {
private static NaiveBayes NaiveBayes;
private Component btnAddImagem;

/**
 * Creates new form TelaResultados
 */
public TelaResultados() {
    initComponents();
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    txtCaminho = new javax.swing.JTextField();
    jLabel2 = new javax.swing.JLabel();
    jButton1 = new javax.swing.JButton();
    jPanel3 = new javax.swing.JPanel();
    jLabelImagem = new javax.swing.JLabel();
    jPanel2 = new javax.swing.JPanel();
    jLabel4 = new javax.swing.JLabel();
    jLabel5 = new javax.swing.JLabel();
    jLabel6 = new javax.swing.JLabel();
    jLabel7 = new javax.swing.JLabel();
    jLabel8 = new javax.swing.JLabel();
    jLabel9 = new javax.swing.JLabel();
    txtNaiveBayes = new javax.swing.JTextField();
    txtJ48 = new javax.swing.JTextField();
    txtIbk1 = new javax.swing.JTextField();
    txtIbk3 = new javax.swing.JTextField();
    txtRedesNeurais = new javax.swing.JTextField();
    btnClassificar = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Projeto OpenCV - Thedy Nelson Lipinski");

    jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

    jLabel2.setText("Selecione a imagem :");

    jButton1.setText("...");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
    jPanel3.setToolTipText("Imagem");

    javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
    jPanel3.setLayout(jPanel3Layout);
    jPanel3Layout.setHorizontalGroup(
        jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel3Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLabelImagem)
            .addContainerGap(392, Short.MAX_VALUE))
    );
    jPanel3Layout.setVerticalGroup(
        jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel3Layout.createSequentialGroup()
            .addComponent(jLabelImagem)
            .addGap(0, 0, Short.MAX_VALUE))
    );

    jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
    jPanel2.setToolTipText("Resultados");
    jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

    jLabel4.setText("Resultados:");
    jPanel2.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, -1, -1));

    jLabel5.setText("Naive Bayes:");
    jPanel2.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 60, -1, -1));

    jLabel6.setText("J48:");
    jPanel2.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 90, -1, -1));

    jLabel7.setText("IBK K=1 :");
    jPanel2.add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 120, -1, -1));

    jLabel8.setText("IBK K=3:");
    jPanel2.add(jLabel8, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 150, -1, -1));

    jLabel9.setText("Redes Neurais:");
    jPanel2.add(jLabel9, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 180, -1, -1));

    txtNaiveBayes.setEnabled(false);
    jPanel2.add(txtNaiveBayes, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 50, 71, -1));

    txtJ48.setEnabled(false);
    jPanel2.add(txtJ48, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 80, 70, -1));

    txtIbk1.setEnabled(false);
    jPanel2.add(txtIbk1, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 110, 70, -1));

    txtIbk3.setEnabled(false);
    jPanel2.add(txtIbk3, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 140, 70, -1));

    txtRedesNeurais.setEnabled(false);
    jPanel2.add(txtRedesNeurais, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 170, 70, -1));

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap())
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addComponent(jLabel2)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(txtCaminho)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jButton1)
                    .addGap(20, 20, 20))))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jLabel2)
                .addComponent(txtCaminho, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jButton1))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, 249, Short.MAX_VALUE)
                    .addContainerGap())
                .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
    );

    btnClassificar.setText("Classificar");
    btnClassificar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnClassificarActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(btnClassificar)
                    .addGap(0, 0, Short.MAX_VALUE)))
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(btnClassificar)
            .addContainerGap())
    );

    pack();
}// </editor-fold>                        

private void btnClassificarActionPerformed(java.awt.event.ActionEvent evt) {                                               
   int tecla, red, green, blue, classe, altura;
    ByteBuffer buf;
    String dir = "src\\imagens";
    String textoGravar = "";

    File diretorio = new File(dir);
    File[] arquivos = diretorio.listFiles();
    
    float[][] caracteristicas = new float[1][5]; //numero de imagens e numero de caracteristicas 
    float jarrycorpo; // caracteristicas
    float jarryorelha; // caracteristicas
    float minioncorpo; // caracteristicas
    float minionroupa; // caracteristicas
    
    
        for (int i = 0; i < arquivos.length; i++) {            try { //for percore imagem por imagem
            jarrycorpo = 0;
            jarryorelha = 0;
            minioncorpo = 0;
            minionroupa = 0;
            
            opencv_core.IplImage imagemOriginal = new opencv_core.IplImage(); //codido do opencv
            imagemOriginal = cvLoadImage(diretorio.getAbsolutePath() + "\\" + arquivos[i].getName()); //carregando imagem
            buf = imagemOriginal.getByteBuffer();
            //System.out.println(diretorio.getAbsolutePath() + "\\" + arquivos[i].getName());
            
            // Classe - Jarry ou Minion
            if (arquivos[i].getName().charAt(0) == 'j') { //informar ao algoritmo quem é quem pegando pelo nome do arquivo
                classe = 0;
            } else {
                classe = 1;
            }
            
            for (altura = 0; altura < imagemOriginal.height(); altura++) { //for para percorrer a imagem inteira
                for (int largura = 0; largura < imagemOriginal.width(); largura++) {
                    
                    blue = buf.get(altura * imagemOriginal.width() * 3 + largura) & 0xFF;
                    green = buf.get(altura * imagemOriginal.width() * 3 + largura + 1) & 0xFF;
                    red = buf.get(altura * imagemOriginal.width() * 3 + largura + 2) & 0xFF;
                    
                    // Corpo Jarry
                    if (blue >= 3 && blue <= 64
                            && green >= 128 && green <= 148
                            && red >= 194 && red <= 209) {
                        
                        jarrycorpo++;
                    }
                    
                    // Orelha Jarry
                    if (blue >= 155 && blue <= 170
                            && green >= 169 && green <= 184
                            && red >= 232 && red <= 251) {
                        
                        jarryorelha++;
                    }

                    // Minion Corpo
                    if (altura > (imagemOriginal.height() / 2)) {
                        if (blue >= 64 && blue <= 114
                                && green >= 163 && green <= 235
                                && red >= 221 && red <= 255) {
                            minioncorpo++;
                        }
                    }
                    
                    //Minion Roupa
                    if (altura > (imagemOriginal.height() / 2)) {
                        if (blue >= 98 && blue <= 165
                                && green >= 63 && green <= 131
                                && red >= 30 && red <= 61) {
                            minionroupa++;
                        }
                        
                    }
                }
            }
            
            // Normaliza as características pelo número de pixels totais da imagem
            jarrycorpo = (jarrycorpo / (imagemOriginal.height()
                    * imagemOriginal.width()) * 100);
            
            jarryorelha = (jarryorelha / (imagemOriginal.height()
                    * imagemOriginal.width()) * 100);
            
            minioncorpo = (minioncorpo / imagemOriginal.height()
                    * imagemOriginal.width()) * 100;
            
            minionroupa = (minionroupa / imagemOriginal.height()
                    * imagemOriginal.width()) * 100;
            
            // Escreve as características no vetor de características
            caracteristicas[i][0] = jarrycorpo;
            caracteristicas[i][1] = jarryorelha;
            caracteristicas[i][2] = minioncorpo;
            caracteristicas[i][3] = minionroupa;
            caracteristicas[i][4] = classe;
            
           /* System.out.println("Vermelho: " + caracteristicas[i][0] + " Amarelo: " + caracteristicas[i][1] + " Verde: " + caracteristicas[i][2] + " Azul: " + caracteristicas[i][3] + " Classe: " + classe);
            textoGravar += System.getProperty("line.separator");
            textoGravar += caracteristicas[i][0] + "," + caracteristicas[i][1] + "," + caracteristicas[i][2] + "," + caracteristicas[i][3] + "," + classe;
            
            cvShowImage("Imagem original", imagemOriginal);
            tecla = cvWaitKey();*/
            
            File arquivo = new File("caracteristicas.arff");
            FileOutputStream f = null;
            try {
                f = new FileOutputStream(arquivo);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(TelaResultados.class.getName()).log(Level.SEVERE, null, ex);
            }
            f.write (textoGravar.getBytes());
            f.close ();
            
            //carregar a base de dados
            
            ConverterUtils.DataSource ds;
            ds = new ConverterUtils.DataSource("src\\imagens\\caracteristicas.arff");
            Instances in;
            in = ds.getDataSet();
            System.out.println(in.toString());
            
            //indica a classe
            
            in.setClassIndex(3);
            
            NaiveBayes nb = new NaiveBayes();
            
            //Cria a tabela de probabilidade
            nb.buildClassifier(in);
            System.out.println(nb.toString());
            
            Instance caracteristica;
            caracteristica = new DenseInstance(6);
            caracteristica.setDataset(in);
            caracteristica.setValue(0,jarryorelha);
            caracteristica.setValue(1,jarrycorpo);
            caracteristica.setValue(2, minioncorpo);
            caracteristica.setValue(3, minionroupa);
            caracteristica.setValue(4,classe);
            
            
            double[] prob;
            prob = nb.distributionForInstance(caracteristica);
           System.out.println("Jerry "+ prob[0]);
           System.out.println("Minion: "+ prob[1]);
        } catch (IOException ex) {
           Logger.getLogger(TelaResultados.class.getName()).log(Level.SEVERE, null, ex);
       } catch (Exception ex) {
           Logger.getLogger(TelaResultados.class.getName()).log(Level.SEVERE, null, ex);
       }
        }
  
}                                              

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

   try{  
    
  JFileChooser busca_foto = new JFileChooser();  
  busca_foto.setCurrentDirectory(new File ("C:\\Projeto\\OpenCV\\src\\imagens"));  
  busca_foto.setDialogTitle("Carregar Imagem - Projeto OpenCV");  
  busca_foto.showOpenDialog(this);  
  String foto = ""+busca_foto.getSelectedFile().getName();  
  txtCaminho.setText(foto);  
  jLabelImagem.setIcon(new ImageIcon("C:\\Projeto\\OpenCV\\src\\imagens\\"+txtCaminho.getText()));  

}catch(Exception erro){

  JOptionPane.showMessageDialog(null, "Não foi possivel carregar a imagem.");  

}
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {


    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TelaResultados().setVisible(true);
        }
    });
}