Coder Social home page Coder Social logo

brenocsp / image-segmentation Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 0.0 3.68 MB

Image segmentation algorithm from .pgm to .ppm

License: MIT License

C 100.00%
c image-segmentation ppm-image ppm netpbm aeds2 algorithms-datastructures algorithms-and-data-structures pgm

image-segmentation's Introduction

Segmentação de Imagens

Trabalho prático para a disciplina Algoritmos e Estruturas de Dados II do curso de Engenharia Elétrica da Universidade Federal de Minas Gerais (UFMG).

1 Introdução

Neste TP, será implementado um algoritmo de segmentação denominado algoritmo de crescimento de regiões. Este algoritmo define um grupo a partir de um pixel aleatório inicial, denominado semente, e expande o grupo para os vizinhos do pixel semente de acordo com um critério baseado na intensidade do pixel. Para um dado pixel P(u, v), sua vizinhança 4-conexa é dada pelos pixels P(u, v + 1), P(u + 1, v), P(u, v - 1) e P(u - 1, v). Se a diferença de intensidade entre dois pixels vizinhos for pequena, o grupo se propaga. Por exemplo, se |P(u, v) - P(u; v+1)| T, então (u, v) e (u, v + 1) pertencem ao mesmo grupo (região), no qual T é um valor de limiar predefinido.

2 Implementação

De maneira geral, existem dois principais algoritmos para gerar as imagens de saída: um interativo com sementes pré-definidas e outro recursivo e com sementes aleatórias.

2.1 Programa Principal

O programa possui duas possibilidades de execução correta. Primeira: caso exista um arquivo de sementes pré-definidas, serão geradas duas saídas uma que utiliza o arquivo de semente auxiliar e outra saída utilizando sementes aleatórias e o algoritmo recursivo. Segunda: caso não exista um arquivo de sementes auxiliares, será gerado somente uma imagem com as sementes aleatórias.

2.2 Organização do Código

O código foi dividido em três arquivos, sendo eles:

  • main.c: contém as diretrizes principais do programa.
  • segmentacao-imagens.c: contém a definição das funções iterativas e recursivas.
  • segmentacao-imagens.h: contém os cabeçalhos das funções iterativas e recursivas.

Para o algoritmo de segmentação iterativa, caso duas sementes pré-definidas estejam na mesma região, a cor que irá prevalecer é a cor da última semente. Porém, no algoritmo recursivo, caso duas sementes aleatórias pertençam à mesma região, a cor que irá prevalecer é a da primeira semente. Isso se deve ao fato do algoritmo recursivo ser mais propenso a causar stack overflow, então a execução do algoritmo deve ser minimizada ao mínimo necessário.

3 Resultados

FIGURA 1: Utilizando a imagem brasil. Da esquerda para direita: imagem original, imagem gerada com sementes pré-definidas, imagem gerada com sementes aleatórias alt text

FIGURA 2: Utilizando a imagem amazon_river. Da esquerda para direita: imagem original, imagem gerada com sementes pré-definidas, imagem gerada com sementes aleatórias alt text

FIGURA 3: Utilizando a imagem split_2. Da esquerda para direita: imagem original, imagem gerada com sementes pré-definidas, imagem gerada com sementes aleatórias alt text

FIGURA 4: Utilizando a imagem vessels. Da esquerda para direita: imagem original, imagem gerada com sementes pré-definidas, imagem gerada com sementes aleatórias alt text

5 Conclusão

A implementação do trabalho foi bem sucedida. A opção de utilizar fila foi por maior similaridade à lógica elaborada no planejamento do trabalho. Durante os teste foi percebido que a lógica de testar os seis vizinhos de um pixel trouxe melhores resultados quando comparado ao teste de somente quatro. No código foram mantidas quatro linhas comentadas que podem ser usadas para usar o algoritmo para testar os vizinhos das diagonais. O algoritmo recursivo não é a melhor opção de solução para esse problem, vixto que é instável e pode ocasionar stack overflow em máquinas menos robustas devido à limitação do tamanho da memória stack. O algoritmo iterativo que utiliza sementes pré-definidas gerou imagens dentro dos parâmetros. Além disso, o algoritmo recursivo que utiliza sementes aleatórias, mesmo utilizando um número alto de sementes quando comparado ao arquivo auxiliar, às vezes deixou de segmentar regiões de interesse na imagem. Isso ocorre devido à probabilidade de encontrar todas as regiões relevantes ser baixa.

image-segmentation's People

Contributors

brenocsp avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.