예제 #1
0
int clique(lista l, grafo g){
    unsigned int removed = 0;
    for (no n=primeiro_no(l); n!=NULL; n=proximo_no(n)) {
        vertice v = conteudo(n);
		if(v->removido == 0){	
			lista vizinhos = vizinhanca(v,0,g);
            unsigned int todos_nos = tamanho_lista(l) - removed - 1;
			for (no auxN=primeiro_no(vizinhos); auxN!=NULL; auxN=proximo_no(auxN)) {
				if(todos_nos == 0)
					break;
				vertice auxV = conteudo(auxN);
				if(auxV->removido == 0){
					for (no verifiyNode=primeiro_no(l); verifiyNode!=NULL; verifiyNode=proximo_no(verifiyNode)) {
						vertice verifyVertice = conteudo(verifiyNode);   
						if(verifyVertice->removido == 0){
							if(strcmp(verifyVertice->nome,auxV->nome) == 0){
								todos_nos--;
								break;
							}   
						}
					}
				}
			}
			if(todos_nos != 0){
				return 0;
			}
		}
        else{
           removed ++;        
        }
    }  
    return 1;
}
예제 #2
0
파일: thinning.cpp 프로젝트: helderc/hIP
void Thinning::ZhanSuen(QImage *img) {

    bool continua = true;
    int x, y, contador;
    QPoint *pixel;
    QImage img1 = *img;

    //CArray <PixelPoint,PixelPoint> RemPoints;
    QList <QPoint *> *pontos_removidos = new QList<QPoint *>();
    //CArray<CArray<BYTE, BYTE> *,CArray<BYTE, BYTE> *> Iteraction;


    while (continua) {
    continua = false;

    // ------------   Primeira Iteração   ------------

    for (y = 1; y < img->height(); y++) {

        for (x = 1; x < img->width(); x++) {

     if(verificaPixel(img, x , y)) {
     // 1º Passo: Pixel Preto e Conectividade igual a 1.
     // 2º Passo: Existem ao menos dois pixels vizinhos pretos, e não mais do que seis;
        if (vizinhanca(img, C(x,y))) {
        // 3º Passo: Ao menos um dos pixels Norte, Leste ou Oeste é branco;
            if ( (!verificaPixel(img, N(x,y))) || (!verificaPixel(img, L(x,y)))|| (!verificaPixel(img, O(x,y))) ) {
        // 4º Passo: Ao menos um dos pixels Norte, Oeste ou Sul é branco;
                if ( (!verificaPixel(img, N(x,y))) || (!verificaPixel(img, O(x,y)))|| (!verificaPixel(img, S(x,y))) ) {
                    continua = true;
                    pontos_removidos->append(new QPoint(x , y));
               }
           }
       }
     }

     }
   }

     // Remover os pontos

    for (contador=0; contador < pontos_removidos->size(); contador++) {
           pixel = pontos_removidos->at(contador);
           img->setPixel(QPoint( pixel->x() ,pixel->y()), qRgb(255,255,255) );
         }

       pontos_removidos->clear();




    // ------------   Segunda Iteração   ------------

       for (y = 1; y < img->height(); y++) {

           for (x = 1; x < img->width(); x++) {

        if(verificaPixel(img, x , y)) {
          // 1º Passo: Pixel Preto e Conectividade igual a 1.
          // 2º Passo: Existem ao menos dois pixels vizinhos pretos, e não mais do que seis;
             if (vizinhanca(img, C(x,y))) {
             // 3º Passo: Ao menos um dos pixels Norte, Leste ou Sul é branco;
                 if ( (!verificaPixel(img, N(x,y))) || (!verificaPixel(img, L(x,y)))|| (!verificaPixel(img, S(x,y))) ) {
             // 4º Passo: Ao menos um dos pixels Oeste, Leste ou Sul é branco;
                     if ( (!verificaPixel(img, O(x,y))) || (!verificaPixel(img, L(x,y)))|| (!verificaPixel(img, S(x,y))) ) {
                        continua = true;
                        pontos_removidos->append(new QPoint(x , y));
                    }
                }
            }
          }

        }
      }


    // Remover os pontos



    for (contador=0; contador < pontos_removidos->size(); contador++) {
            pixel = pontos_removidos->at(contador);
            img->setPixel(QPoint( pixel->x() ,pixel->y()), qRgb(255,255,255) );
          }
           pontos_removidos->clear();

        }

    img1 = *img;
}
예제 #3
0
파일: thinning.cpp 프로젝트: helderc/hIP
void Thinning::Holt(QImage *img) {

    int x,y;
    bool continua = true;
    QImage *img1 = img;
    QPoint * pixel;
    QList <QPoint *> *pontos_removidos = new QList<QPoint *>(); // cria a lista
    int contador;

    while(continua)    {

    continua = false;

    for (y = 1; y < img1->height(); y++) {
        for (x = 1; x < img1->width(); x++) {


        // verificaPixel somente para pixels pretos (otimização)
         if(verificaPixel(img1, x, y)) {

        // verificaPixelerifica fórmula de sobrevivencia do pixel
         if( ( !vizinhanca(img1,C(x,y)) || ( verificaPixel(img1,L(x,y)) && verificaPixel(img1,S(x,y) )
           && ( verificaPixel(img1,N(x,y)) || verificaPixel(img1,O(x,y)) ) ) ) == false) {
            // Então o pixel deve ser removido...
            continua = true;
            pontos_removidos->append(new QPoint(x , y));
            }

         }
     }
   }


    for (contador=0; contador < pontos_removidos->size(); contador++) {

      pixel = pontos_removidos->at(contador);
      img1->setPixel(QPoint( pixel->x() ,pixel->y()), qRgb(255,255,255) );
    }


     pontos_removidos->clear();



    for (y = 1; y < img1->height(); y++) {
        for (x = 1; x < img1->width(); x++) {


        // Verifica somente para pixels pretos
        // (somente para optimizar a velocidade)
            if(verificaPixel(img1, C(x,y)) == true)  {
            // Verifica formula de sobrevivencia do
            // pixel...
                if( ( !vizinhanca(img1, C(x,y)) || ( verificaPixel(img1, O(x,y))
                       && verificaPixel(img1,N(x,y)) && ( verificaPixel(img1, S(x,y))
                       || verificaPixel(img1, L(x,y)) ) ) ) == false) {
            // O pixel deve ser removido...
            continua = true;

             pontos_removidos->append(new QPoint(x , y));
                }
            }
        }
    }



    for (contador=0; contador < pontos_removidos->size(); contador++) {
        pixel = pontos_removidos->at(contador);
        img1->setPixel(QPoint( pixel->x() ,pixel->y()), qRgb(255,255,255) );
      }

       pontos_removidos->clear();

  }

 img = img1;

}
예제 #4
0
int simplicial(vertice v, grafo g){       
    lista vizinhos = vizinhanca(v,0,g);    
    return clique(vizinhos,g);
}