Bressam icon

LBP - I.A.

Bressam | PRO | 05/10/18 06:41:01 PM UTC | 0 ⭐ | 218 👁️ | Never ⏰ | []
C |

3.19 KB

|

None

|

0 👍

/

0 👎

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
//#include <opencv2/cv.h>
#include <opencv2/highgui/highgui.hpp>
 
int main() {
    IplImage* image, image2;
    char caminho[9999];
    int i, j, k, classe = 0, l, m, n;
    float teste;
    FILE * fp;
    errno_t err;
    //*** CRIA O ARQUIVO ARFF E SALVA O CABEÇALHO ***
    //fp = fopen("baseLBP.arff", "w");
    err = fopen_s(&fp, "baseLBP.arff", "w");
    //fprintf(fp, "%base de teste criada por Alessandro and Zacarias para a disciplina de PDI - Engenharia de Software UEPG\n\n"); 
    fprintf(fp, "@relation imgs_teste_lbp\n\n");
 
    for (i = 0; i<256; i++)
        fprintf(fp, "@attribute At%i numeric\n", (i / 256));
 
 
    fprintf(fp, "@attribute Class {1,2,3,4,5,6,7,8,9,10}\n\n");
    fprintf(fp, "@DATA\n");
 
 
    for (i = 0; i<2; i++) {
        //sprintf(caminho, "C:\\Downloads\\image\\%d.jpg", i);
        sprintf_s(caminho, 9999, "C:\\Downloads\\image\\%d.jpg", i);
        image = cvLoadImage(caminho, 0);
 
        float h[256];// vetor de features com 256 valores disponiveis       
 
 
        for (n = 0; n<256; n++) h[n] = 0.0;   //inicializa vetor de features 
 
 
                                              //*** VERIFICA SE EH UMA NOVA CLASSE (TIPO DA IMAGEM)***
        if (i % 100 == 0) { //a cada 100 muda a categoria das fotos
            classe = classe + 1;
        }
 
 
        int lbp[3][3];//vetor do lbp        
        int lbpBinario[3][3];//vetor do lbp binario
        int largura = image->width - 4;
        int altura = image->height - 4;
 
        for (j = 0; j<largura; j++) {//vamos percorrer toda a imagem passando e criando a mascara, tem o -1 para pular a ultima linha de pixel
            for (l = 0; l<3; l++) { //zera lbp
                for (n = 0; n<3; n++) {
                    lbp[l][n] = 0;
                }
            }
            for (l = 0; l<3; l++) { //zera lbpbinario
                for (n = 0; n<3; n++) {
                    lbpBinario[l][n] = 0;
 
                }
            }
            for (k = 0; k<altura; k++) {
                for (l = 0; l<3; l++) { //pega a matrix 3X3 da imagem com os vales de cinza
                    for (n = 0; n<3; n++) {
                        CvScalar v;
                        v = cvGet2D(image, k + l, +n);
                        lbp[l][n] = (int)v.val[0];
 
                    }
                }
 
 
 
                int central = lbp[1][1];//pega o valor central para ser comparado e gerar a matriz binaria
                for (l = 0; l<3; l++) {
                    for (n = 0; n<3; n++) {
                        if (lbp[l][n] >= central) {
                            lbpBinario[l][n] = 1;
                        }
                        else {
                            lbpBinario[l][n] = 0;
                        }
                    }
                }
                central = 0;//agora vai pegar os binarios e trasformar no novo decimal que sera o novo valor da cadeia LBP, gambiarra para trasnformar um decimal que eh `binario` em decimarl
                central = central + (128 * lbpBinario[0][0]);
                central = central + (64 * lbpBinario[0][1]);
                central = central + (32 * lbpBinario[0][2]);
                central = central + (16 * lbpBinario[1][2]);
                central = central + (8 * lbpBinario[2][2]);
                central = central + (4 * lbpBinario[2][1]);
                central = central + (2 * lbpBinario[2][0]);
                central = central + (1 * lbpBinario[1][0]);
 
                h[central]++;   // histograma LBP
 
 
            }
 
        }
 
        // Normalização
        for (n = 0; n<256; n++)
            h[n] = h[n] / (largura * altura);
 
 
        // Salve em arquivo
        for (n = 0; n<256; n++) {
            fprintf(fp, "%f,", (h[n]));
        }
 
        // Salva a classe
        fprintf(fp, "%d\n", classe);
 
 
    }
    fclose(fp);
    return 0;
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎