#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
0 B
|👍
/👎