Boa noite pessoal,
Estou desenvolvendo uma ferramenta que detecta a taxa de nudez em uma imagem.
Entretanto, estou com um problema de lógica, como faria pra verificar se a quantidade de pele amostra é maior que 70%.
Segue abaixo o código:
public void Filtro(ImageProcessor saida){
ImagePlus objIplus = new ImagePlus(null, saida);
ImageProcessor imp = objIplus.getProcessor();
int nAlt = objIplus.getProcessor().getHeight();
int nLarg = objIplus.getProcessor().getWidth();
int nVerm = 0;
int nAzul = 0;
int nVerde = 0;
int nMin = 0;
int nMax = 0;
int nCont = 0;
int nMedia = 0;
int nPixel = 0;
int nAux = 0;
int[] rgb = new int[3];
int[] cor1 = new int[]{0, 0, 0}; //Preto
int[] cor2 = new int[]{264, 82, 108}; //Vermelho
int[] cor3 = new int[]{79,106,143}; //Azul
for(int i = 0; i < nLarg; i++){
for(int j = 0; j < nAlt; j++){
nMin = (int) imp.minValue();
nMax = (int) imp.maxValue();
imp.getPixel(i,j,rgb);
nVerm = rgb[0];
nVerde = rgb[1];
nAzul = rgb[2];
nMedia = (nVerm+nVerde+nAzul)/3;
//Se for negra
if((nVerm >= 109 && nVerm <= 203) && (nVerde >= 92 && nVerde <= 147) && (nAzul >= 78 && nAzul <= 123)){
imp.putPixel(i, j, cor2);
nCont++;
//JOptionPane.showMessageDialog(rootPane, "Pixel:["+i+"]["+j+"] é pele/ Vermelho"+nVerm+"/Verde"+nVerde+"/Azul"+nAzul);
}else if((nVerm >= 115 && nVerm <= 160) && (nVerde >= 39 && nVerde <= 84) && (nAzul >= 20 && nAzul <= 65)){
imp.putPixel(i, j, cor2);
nCont++;
}else if((nVerm >= 207 && nVerm <= 252) && (nVerde >= 129 && nVerde <= 174) && (nAzul >= 83 && nAzul <= 128)){
imp.putPixel(i, j, cor2);
nCont++;
}else if((nVerm >= 97 && nVerm <= 143) && (nVerde >= 41 && nVerde <= 86) && (nAzul >= 25 && nAzul <= 70)){
imp.putPixel(i, j, cor2);
nCont++;
}else if((nVerm >= 204 && nVerm <= 209) && (nVerde >= 141 && nVerde <= 186) && (nAzul >= 108 && nAzul <= 153)){
imp.putPixel(i, j, cor2);
nCont++;
}else if((nVerm >= 170 && nVerm <= 215) && (nVerde >= 131 && nVerde <= 176) && (nAzul >= 123 && nAzul <= 168)){
imp.putPixel(i, j, cor2);
nCont++;
}else if((nVerm >= 188 && nVerm <= 233) && (nVerde >= 173 && nVerde <= 216) && (nAzul >= 173 && nAzul <= 218)){
imp.putPixel(i, j, cor2);
nCont++;
}else if((nVerm >= 200 && nVerm <= 245) && (nVerde >= 195 && nVerde <= 240) && (nAzul >= 210 && nAzul <= 255)){
imp.putPixel(i, j, cor2);
nCont++;
}else{
nAux++;
}
nPixel++;
}
}
int nPorcImg = 0;
int nPorcAcei = 0;
String cMsg;
int nNaoPele = nAux;
int nPele = 0;
//Pega quantidade de pixel pintado
nPele = nCont;
//nPorcAcei = (nPorcImg-((nPele*70)/100));
//A partir daqui não sei como proceder
if (nCont < nPorcAcei) {
cMsg = "é menor que 70%";
} else {
cMsg = "ta nua";
}
//int nTot = (nCont*70)/100;
JOptionPane.showMessageDialog(rootPane, cMsg);
}
public void Suavizar(){
imgSaida = img.duplicate();
//Equalização
ContrastEnhancer c = new ContrastEnhancer();
c.equalize(imgSaida);
exibeImagemProcessada(imgSaida, lblimagem);
}
Agradeço desde já.