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; }
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; }
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; }
int simplicial(vertice v, grafo g){ lista vizinhos = vizinhanca(v,0,g); return clique(vizinhos,g); }