43
1 PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL FACULDADE DE ENGENHARIA SISTEMA EMBARCADO PARA PROCESSAMENTO DE IMAGENS COM AQUISIÇÃO DE CARACTERÍSTICAS APLICADA A AQUICULTURA Porto Alegre, 06 de dezembro de 2017. Autor: Guilherme Sehnem Cavalheiro Pontifícia Universidade Católica do Rio Grande do Sul Curso de Engenharia Elétrica-Eletrônica Av. Ipiranga 6681, - Prédio 30 - CEP: 90619-900 - Porto Alegre - RS - Brasil Email: [email protected] Orientador: Prof. Anderson Royes Terroso Pontifícia Universidade Católica do Rio Grande do Sul Av. Ipiranga 6681, - Prédio 30 - Bloco F - Sala 204 - CEP: 90619-900 - Porto Alegre - RS- Brasil Email: [email protected]

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

1

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL

FACULDADE DE ENGENHARIA

SISTEMA EMBARCADO PARA PROCESSAMENTO DE IMAGENS

COM AQUISIÇÃO DE CARACTERÍSTICAS APLICADA A

AQUICULTURA

Porto Alegre, 06 de dezembro de 2017.

Autor: Guilherme Sehnem Cavalheiro

Pontifícia Universidade Católica do Rio Grande do Sul

Curso de Engenharia Elétrica-Eletrônica

Av. Ipiranga 6681, - Prédio 30 - CEP: 90619-900 - Porto Alegre - RS - Brasil

Email: [email protected]

Orientador: Prof. Anderson Royes Terroso

Pontifícia Universidade Católica do Rio Grande do Sul

Av. Ipiranga 6681, - Prédio 30 - Bloco F - Sala 204 - CEP: 90619-900 - Porto Alegre - RS-

Brasil

Email: [email protected]

Page 2: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

2

RESUMO

O estudo do crescimento de peixes passa por medições individuais e regulares para os

mais variados fins da aquicultura, seja na criação ou pesquisa sobre as espécies dos animais.

Propõe-se o desenvolvimento de um protótipo de aquário para peixes com um sistema de

processamento embarcado, com o qual será feita a extração de alguns dados dos animais

como o comprimento de cada peixe, a cor e a quantidade de peixes contidos no aquário,

automatizando a etapa de extração de medidas dos peixes e limitando a manipulação manual

dos mesmos. A extração dos dados será feita a partir de uma câmera conectada ao

microcomputador Raspberry Pi 3, com o qual utilizando Processamento de Imagens em

linguagem Python e com a biblioteca OpenCV, poderemos extrair os dados e apresentá-los

em uma tela com entrada HDMI. Deste modo poderemos facilitar o trabalho de aquisição de

medidas e contagens de peixes, bem como tornar o processo mais rápido e prático.

Palavras-chave: peixes. características. quantificação. câmera. opencv.

Page 3: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

3

EMBEDDED SYSTEM FOR IMAGE PROCESSING WITH

ACQUISITION OF CHARACTERISTICS APPLIED TO

AQUACULTURE

ABSTRACT

The study of fish growth involves individual and regular measurements for the most

varied purposes of aquaculture, whether in breeding or research on animal species. It is

proposed the development of a prototype of aquatic basin for fish with an embedded

processing system, with which will be made the extraction of some data of the animals as the

length of each fish, the color and quantity of fish contained in a basin , automating the step of

extracting fish measurements and limiting the manual manipulation of the fish. The data

extraction will be done from a camera connected to the Raspberry Pi 3 microcomputer, with

which using Python Image Processing and the OpenCV library, we can extract the data and

present it on a screen with HDMI input. In this way we can facilitate the work of acquiring

measurements and counts of fish, as well as making the process faster and more practical.

Key-words: fish. measures. quantification. camera. opencv.

Page 4: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

4

1 INTRODUÇÃO

A aquicultura no Brasil é um setor que está em expansão. A indústria do peixe

emprega hoje cerca um milhão de pessoas e de acordo com as estatísticas da Organização das

Nações Unidas para Alimentação e Agricultura (FAO), o mercado de aquicultura deve crescer

mais de 100% até o ano de 2025. Com o crescimento desse mercado, torna-se necessário o

emprego de novas tecnologias nessa área.

É de grande interesse para pesquisadores e criadores de peixes a obtenção de dados

quantificativos relacionados aos animais aquáticos. Não foi encontrado no Brasil um sistema

inteligente para monitoramento de um conjunto de peixes capaz de obter dados como o

comprimento e quantidade de peixes contidas em um aquário de forma rápida, precisa e

prática. Os dispositivos disponíveis no mercado realizam apenas a contagem de peixes, mas

nenhum é capaz de medí-los ou capaz de adquirir outros tipos de informações como por

exemplo a cor de cada peixe, que permite a identificação dos mesmos.

Será visto ao longo deste artigo como construir um protótipo para obtenção de dados

relacionados aos peixes apresentando a metodologia, o dimensionamento do protótipo e o

resultado de simulações. Ao final deste artigo serão apresentados uma conclusão e as

referências bibliográficas.

1.1 Tema de Pesquisa

Com este trabalho propõe-se o desenvolvimento de um protótipo de bacia aquática

para peixes com um sistema de processamento embarcado, com o qual será feita a extração

de algumas características dos animais, tais como o comprimento de cada peixe, a cor e a

quantidade de peixes que estarão contidos na bacia. A extração desses dados é feita a partir

de uma câmera conectada ao microcomputador Raspberry Pi 3, com o qual utilizando

Processamento de Imagens em linguagem Python e com a biblioteca OpenCV, pode-se

extrair os dados e apresentá-los em uma tela com entrada HDMI.

1.2 Justificativa do Tema

O tema proposto foi inicialmente solicitado durante a realização do programa

BRAFITEC pela instituição francesa IFREMER, localizada em Montpellier, na França,

responsável por fazer pesquisas e exploração marítima. Nesta instituição pesquisadores fazem

medidas regulares e individuais em algumas espécies de peixes, para a obtenção de dados que

possibilitem estudos sobre o desenvolvimento das espécies. Esta etapa de obtenção de dados

Page 5: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

5

como medições e contagens unitárias são frequentemente feitas manualmente, sendo um

trabalho impreciso, desgastante e demorado para quem o realiza e ao mesmo tempo

traumatizante para os peixes.

1.3 Objetivo do Trabalho

Este trabalho busca otimizar a etapa de obtenção de dados dos peixes com o

desenvolvimento de um dispositivo de aquisição de vídeo portável que permitirá extrair o

tamanho de cada peixe e a quantidade de peixes contidos em uma bacia aquática,

automatizando assim o trabalho de aquisição de medidas e possibilitando maior precisão e

agilidade na obtenção de dados, tornando esse processo mais rápido e prático.

A realização deste projeto objetiva também um certo conhecimento em Processamento

de Imagens com a biblioteca OpenCV e em programação com liguagem Python, sendo estes

conhecimentos necessários para a realização do projeto.

1.4 Delimitações do Trabalho

O estudo será restringido no desenvolvimento de um protótipo para obtenção de dados

de animais aquáticos, limitando-se ao estudo sobre Processamento de Imagens. Não será feito

qualquer estudo relacionado ao desenvolvimento ou comportamento sobre os peixes.

Tampouco será feito um estudo sobre as classes da biblioteca OpenCV.

1.5 Aplicações

Este trabalho poderá ser usado como auxílio para estudos relacionado aos peixes em

diversas áreas. Como exemplo será possível auxiliar pesquisadores no estudo de alimentos,

possibilitando saber o efeito de diferentes tipos alimentos no crescimento dos peixes.

Permitirá também auxiliar pesquisadores na extração de dados para estudo de novas espécies.

Será útil para criadores de peixes a ter um controle sobre o crescimento populacional em

cardumes bem como a taxa de crescimento que cada tipo de peixe apresenta de acordo com o

tipo de alimentação que está recebendo, ajudando ao criador a aumentar a sua produção. Esse

projeto poderá ser usado para diversos fins, dependendo das necessidades de quem o utilizar.

1.6 Aquicultura no Brasil

Segundo a Organização das Nações Unidas para Agricultura e Alimentação (FAO), a

aquicultura é a mais rápida das atividades agropecuárias em termos de resultados produtivos e

Page 6: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

6

uma das poucas capazes de responder com folga ao crescimento populacional, o que pode

contribuir para o combate à fome em todo o mundo.

A aquicultura está sendo fomentada no Brasil por meio do Ministério da Pesca e Cultura,

para que o país deixe de ser um importador e passe a ser um exportador de pescado, tornando-

se uma potência aquícola. Assim abre-se mercado para tecnologias nessa área.

Existe atualmente no mercado vários dispositivos destinados à aquicultura, desde

sensores de ph até alimentadores automáticos, mas poucos destinados a adquirir

características dos peixes. No Brasil existe disponível um sistema que calcula a quantidade de

peixes presente em uma bacia, mas não extrai o comprimento de cada peixe. Esse sistema

existente usa como sensor um tubo onde apenas peixes de porte pequeno possam ser contados.

Com esse projeto pretende-se criar um sistema para fazer a extração de dados como a

quantidade de peixes contidos em uma bacia e o comprimento de cada um deles que seja de

baixo custo e de fácil instalação e que atenda aos requisitos do utilizador, podendo extrair

características de peixes com qualquer tamanho.

Page 7: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

7

2 REFERENCIAL TEÓRICO

A seguir serão apresentados alguns conceitos necessários para o desenvolvimento

deste projeto.

2.1 Processamento Digital de Imagens

A área de processamento digital de imagens vem evoluindo continuamente ao longo

dos anos, com um aumento significativo de estudos envolvendo morfologia matemática, redes

neurais, processamento de imagens coloridas, compressão de imagens, reconhecimento de

imagens e sistemas de análise de imagens baseados em conhecimento (GONZALEZ &

WOODS, 2010).

O processamento de imagens é realizado em etapas bem definidas que compartilham

informações entre si para produzir o resultado esperado, de forma que o resultado de cada

etapa interfere diretamente nas etapas subsequentes. As etapas fundamentais para o

processamento digital de imagens se dividem em: aquisição da imagem, filtros de imagem,

segmentação, reconhecimento e interpretação (GONZALEZ & WOODS, 2010).

O processamento de imagens tem como funções facilitar a visualização da imagem ou

adequá-la para análises quantitativas através de correções de defeitos ou realces das regiões de

interesse nas imagens; e a extração e tratamento de dados quantitativos, feitos pelo próprio

computador. (GOMES & VELHO, 2002).

2.1.1 Imagem Digital

Uma imagem pode ser definida como uma função bidimensional f(x,y) , onde x e y

são as coordenadas espaciais de um plano e o valor da amplitude de f é chamado de

intensidade da imagem neste ponto. Quando os valores das coordenadas espaciais x e y e da

amplitude de f são quantidades finitas e discretas, esta imagem é definida como uma imagem

digital. Cada elemento de uma da matriz de uma imagem digital possui uma localização e um

valor específico, que são denominados de elementos pictóricos ou pixel (GONZALEZ &

WOODS, 2010).

Em uma imagem digital colorida o modelo RGB é amplamente utilizado em câmeras de

vídeo coloridas, que medem a quantidade de luz vermelha, verde e azul incidida. No modelo

RGB, cada pixel consiste em três valores de amplitude referente a cada componente de cor

primário e o número de bits utilizado para representar cada pixel é denominado de

profundidade do pixel (GONZALEZ & WOODS, 2010).

Page 8: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

8

Para diminuir o peso do processamento digital de imagens, antes de qualquer operação, as

imagens devem ser convertidas do formato RGB para Escala de Cinza. Computacionalmente

essas imagens são armazenadas utilizando-se 8 bits (um byte) por pixel, o que possibilita 256

intensidades possíveis (GONZALEZ & WOODS, 2010). Portanto em uma imagem digital em

tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de

cinza possíveis.

A imagem digital possui um marco inicial na coordenada f(x,y) = (0,0), sendo „x‟

representando as colunas e „y‟ representando as linhas da imagem, conforme demostrado na

Figura 1.

Figura 1: Representação da imagem digital.

Fonte: GONZALEZ & WOODS, 2010.

Um vídeo é formado por várias imagens que são mostradas consecutivamente por um

período de tempo, sendo que sua unidade de medida é definida por Frames por Segundo

(FPS). No processamento digital de um vídeo, são analisadas todas as imagens apresentadas

pelo vídeo, como se fossem imagens individuais.

2.1.2 Filtros de Imagem

Os filtros digitais de imagem são técnicas matemáticas de processamento digital de

imagens, com o objetivo de realizar melhoramentos para a visualização ou para redução de

dados a serem processados nas áreas de interesse. Estas técnicas necessitam de alto poder

computacional de acordo com a qualidade e resolução das imagens de origem. Vamos utilizar

para este projeto os conceitos de Erosão, Dilatação e Suavização, a fim de diminuir os ruídos

que possam dificultar as operações de reconhecimento de objetos em uma imagem.

Page 9: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

9

A operação de erosão, mostrada na Figura 2, é usada para eliminar o ruído em uma

imagem. Com essa operação as pequenas manchas ou ruídos em uma imagem são reduzidos a

nada, enquanto as regiões maiores que contêm conteúdo visualmente significativo não são

afetadas (BRADSKI & KHAELER, 2008).

Figura 2: Exemplo da Erosão em uma imagem digital.

Fonte: BRADSKI & KHAELER, 2008.

A operação de dilatação, mostrada na Figura 3, é frequentemente usada quando se

tenta encontrar componentes conectados, ou seja, grandes regiões discretas de cor ou

intensidade de pixels semelhantes. A utilidade da dilatação existe porque, em muitos casos,

uma região contínua poderia ser quebrada em múltiplos componentes como resultado de

ruído, sombras ou algum outro efeito similar na imagem. Uma pequena dilatação fará com

que esses componentes fundam-se (BRADSKI & KHAELER, 2008).

Figura 3: Dilatação em uma imagem digital.

Fonte: BRADSKI & KHAELER, 2008.

A suavização, também chamado de desfocagem, é uma operação de processamento de

imagem simples e frequentemente usada. Geralmente é utilizada para reduzir ruídos ou fazer

Page 10: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

10

alisamentos em objetos da imagem, reduzindo a sua resolução. Seu efeito é mostrado na

Figura 4.

Figura 4: Suavização em uma imagem digital.

Fonte: BRADSKI & KHAELER, 2008.

2.1.3 Limiarização

Em muitos casos é comum o desejo de dividir a imagem em regiões de interesse com

base em informações de sua cor ou intensidade de níveis de cinza. Nesses casos, a

limiarização é a técnica indicada. O princípio da limiarização consiste em separar as regiões

de uma imagem quando esta apresenta duas classes, o fundo e o objeto de interesse (FILHO &

NETO, 1999).

Esse processo também é chamado de binarização, já que é caracterizado pela bipartição

do conjunto de cores, segundo um limiar (valor do nível de cinza) determinado. Ou seja, cada

pixel da imagem é convertido em branco, caso seu valor de cinza seja igual ou superior ao

limiar, ou preto, caso contrário (SILVA, 2014).

Com este método é possível identificar os objetos de interesse e ignorar todas as outras

informações desnecessárias em uma imagem. A técnica de limiarização será feita a partir dos

conceitos de histograma e threshold, explicados à seguir.

2.1.4 Histograma de uma Imagem

O histograma é uma representação gráfica da frequência de ocorrências de um

determinado evento. Em uma imagem digital em tons de cinza, o histograma mostra a

frequência de ocorrência de cada um dos tons, como pode ser exemplificado na Figura 5

(MOESLUND, 2012).

Page 11: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

11

Figura 5 - Histograma de uma imagem digital em tons de cinza.

Fonte: MOESLUND ,2012.

O gráfico do histograma é plotado com a intensidade dos pixels para 256 tons no eixo

horizontal e, no eixo vertical, a probabilidade de ocorrência dos tons de cinza na imagem

(GONZALEZ & WOODS, 2010).

2.1.5 A Técnica de Threshold

O Threshold é uma técnica de limiarização de níveis de cinza de uma imagem que

pode ser largamente utilizada na detecção de objetos conhecidos em um determinado fundo.

Ao analisar um histograma e detectar a faixa de níveis de cinza que representam o objeto

procurado na imagem, realiza-se a conversão dos pixels internos da faixa informada para o

nível máximo do histograma, valor 255, e os pixels que estiverem fora da faixa informada

receberão o nível mínimo do histograma, valor zero. Após a aplicação do threshold no

intervalo definido no histograma, será possível visualizar com clareza os objetos procurados

na imagem, pois a imagem foi convertida de tons de cinza para preto e branco, de forma que

os objetos procurados estejam com máxima diferença de nível de cinza com relação ao fundo,

maior diferença de contraste, reduzindo também a quantidade de informação a ser processada

(PRESTES, 2013). A Figura 6 exemplifica a operação de Theshold.

Page 12: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

12

Figura 6: Threshold aplicado para a segmentação de um objeto.

Fonte: opencv.org.

Esta técnica de binarização da imagem nos permite fazer a segmentação do objeto

desejado, possibilitando a manipulação deste objeto e a extração de dados desejados.

2.1.6 Vizinhança entre Pixels

Um dos principais conceitos no relacionamento entre pixels é o conceito de

vizinhança. Um pixel p com coordenadas espaciais x e y tem quatro vizinhos horizontais e

verticais, cujas coordenadas são dadas pela Tabela 1 (GONZALEZ & WOODS, 2010):

Tabela 1: Representação das coordenadas vizinhança-4

(X,Y-1)

(X-1,Y) (X,Y) (X+1,Y)

(X,Y+1)

Fonte: GONZALEZ & WOODS, 2010.

Este conjunto de pixels mostrados na tabela acima é chamado de vizinhança-4 do pixel

p. Os quatro vizinhos diagonais de p tem suas coordenadas apresentadas na Tabela 2:

Tabela 2: Representação das coordenadas diagonais de um pixel.

(X-1,Y-1)

(X+1,Y-1)

(X,Y)

(X-1,Y+1)

(X+1,Y+1)

Fonte: GONZALEZ & WOODS, 2010.

Esses pontos apresentados na tabela 2, juntamente com a vizinhança-4 da tabela 1, são

chamados de vizinhança-8 de p (GONZALEZ & WOODS, 2010), apresentadas na Tabela 3.

A contiguidade entre os pixels, também denominada conectividade é determinada em geral

pela Conectividade 4 e Conectividade 8. A Conectividade 4 estabelece que somente os 4

Page 13: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

13

pixels adjacentes vertical e lateralmente são considerados contíguos, sem levar em conta os

pixels adjacentes da diagonal. Isto significa que se um pixel estiver conectado a outro pixel

adjacente à sua diagonal, eles serão considerados pertencentes a dois objetos separados. A

Conectividade 8 determina que todos os 8 pixels adjacentes são considerados contíguos,

fazendo parte do mesmo objeto (GOMES & VELHO, 2002)..

Tabela 3: Representação das coordenadas vizinhança-8.

(X-1,Y-1) (X,Y-1) (X+1,Y-1)

(X-1,Y) (X,Y) (X+1,Y)

(X-1,Y+1) (X,Y+1) (X+1,Y+1)

Fonte: (GONZALEZ, 2010).

O acesso à cada pixel individual e sua relação aos pixels vizinhos permite a criação de

algoritmos de Processamento de Imagens destinados aos mais variados fins, como por

exemplo identificar objetos a partir de seus contornos.

Após a identificação dos objetos de interesse em uma imagem, podemos fazer a

extração de dados. Em geral, a extração de dados pode ser dividida em dois tipos de medida:

medidas de campo e medidas de região. As medidas de campo se referem ao campo como um

todo, como na medição de número de objetos, área total dos objetos e fração de área, gerando

como resultado apenas um valor por medida. As medidas de região se referem aos objetos

individualmente, ou seja, é extraído um parâmetro de cada objeto na imagem, como por

exemplo, tamanho, forma e posição das partículas (GOMES & VELHO, 2002).

2.1.7 Razão de Aspectos

A Razão de Aspectos (RA) é um parâmetro utilizado para medir o alongamento de um

determinado objeto. Os aspectos, também chamados calibres, feret diameters ou

simplesmente ferets, equivalem às sombras dos objetos em diferentes direções. As principais

medidas são o calibre mínimo e o calibre máximo (AUGUSTO, 2012), mostrados na Figura

7.

Page 14: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

14

Figura 7 – Razão de Aspectos.

Fonte: AUGUSTO, 2012.

A razão de aspectos é obtida pela razão entre o calibre mínimo e o calibre máximo,

também chamados de FERETMIN e FERETMAX, de acordo com a seguinte equação:

(1)

Depois de várias adaptações ao objeto, a partir destas sombras são então obtidos os

valores máximo e mínimo de comprimento, definidos respectivamente como o FERETMAX e

FERETMIN. Para encontrar estes dois valores é calculada e escolhida a disposição com a

razão de aspectos de maior valor. Assim, o objeto que se deseja obter suas medidas é então

enquadrado em uma caixa retangular, possibilitando obter o seu comprimento a partir do valor

FERETMAX. Caso o objeto não esteja de forma curvada, é possível obter também sua largura

a partir do valor de FERETMIN.

Visto que os peixes poderão estar dispostos de diferentes maneiras, este método

adaptativo permite calcular seus comprimentos não importando o posicionamento ou

disposição dos peixes.

2.2 A biblioteca OpenCV

OpenCV é uma biblioteca open source de visão computacional que fornece uma

infraestrutura simples de se usar e que possibilita a criação aplicativos sofisticados

rapidamente. Esta biblioteca contém mais de 500 funções que auxiliam no Processamento

Digital de Imagens em diversas áreas. A biblioteca está escrita em C e C++, mas também

Page 15: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

15

permite a sua utilização em diversas linguagens de programação como por exemplo em

Python. Pode ser executada em vários sistemas como Linux, Windows e Mac OS X e foi

projetado para uma boa eficiência computacional e com foco em aplicativos em tempo real.

Com esta biblioteca poderemos detectar objetos de interesse, notavelmente os peixes,

a partir de funções que nos permitem identificar objetos em uma imagem e assim com suas

coordenadas na matriz de pixels obter os dados desejados.

2.3 Placa Raspberry Pi

O Raspberry Pi 3 Model B, apresentado na Figura 8, é um minicomputador que possui

entradas e saídas que qualquer computador normal possui, desenvolvido no Reino Unido e

lançado no ano de 2012. Este computador permite a execução de variantes do sistema

operacional Linux e com ele é possível desenvolver algoritmos em linguagem Python. O

Raspberry Pi 3 possui o sistema operacional Raspbian. Fornece entrada para uma câmera,

possibilitando obter imagens em tempo real que nos permitirão, utilizando processamento de

imagens com a biblioteca OpenCV, obter os dados desejados como o comprimento dos

peixes, cores e quantidade.

Figura 8 – Placa a ser utilizada.

Fonte: raspberrypi.org

Esta placa possui dimensões 85,60 mm × 53,98 mm × 17 mm, com 4 núcleos de

processamento e com frequência de operação de 1.2 GHz. Suas pequenas dimensões

possibilitam uma portabilidade ao projeto, permitindo sua utilização de modo prático e rápido.

Page 16: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

16

3 METODOLOGIA

Para o desenvolvimento do projeto são necessários um sistema para aquisição e

prepocessamento de imagens e uma plataforma contendo uma bacia aquática, destinada à

colocação dos peixes e fixação do sistema embarcado. Será utilizado o microcomputador

Raspberry Pi 3 para o desenvolvimento computacional do projeto, pois além de ser compacto

permite fazer o preocessamento em tempo real. Para a fixação do mesmo, foi desenvolvida

uma plataforma como ilustrada na Figura 9, destinada também à colocação dos peixes na

bacia de onde será capturados imagens para fazer o processamento e obtenção dos dados.

Figura 9 – Plataforma para fixação da câmera e posicionamento dos peixes.

Fonte: O Autor.

No desenvolvimento do modelo computacional foi utilizada a linguagem de programação

Phyton 2.7 que permite desenvolver aplicações de maneira rápida e clara em diversas áreas

tecnológicas, como no nosso caso aplicações para dispositivos portáteis. Como o aplicativo

trabalha com a aquisição e processamento de imagens digitais, foi necessário o uso de uma

biblioteca para processamento de imagens, na qual será utilizado a biblioteca OpenCV. Esta

biblioteca de classes permite, dentre outras aplicações, a manipulação avançada de imagens

digitais. A biblioteca OpenCV possuirá a versão 3.1. Já existem várias outras versões mais

recentes desta biblioteca, mas por conta de compatibilidade de algumas classes da biblioteca com

a linguagem Phyton 2.7 será empregado a versão 3.1 da biblioteca OpenCV.

Page 17: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

17

Todas as etapas do projeto são apresentadas no fluxograma da Figura 10 a seguir.

Figura 10 –Fluxograma com as etapas do projeto.

Fonte: O Autor.

Após a fixação da câmera e a instalação da biblioteca OpenCV, pode-se dar início às

etapas de processamento de imagens. O primeiro passo é a digitalização da imagem com a

aquisição do vídeo e a captura das imagens individuais. Após a obtenção da imagem digital, o

próximo passo consiste na binarização da imagem, para que seja possível identificar os

objetos em etapas posteriores. É necessário agora aplicar filtros de imagem. Os filtros de

imagem servem para melhorar a qualidade da imagem, para que as próximas etapas sejam

bem-sucedidas. Ao passar por todas essas etapas pode-se então fazer a identificação de

Page 18: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

18

objetos. O papel básico desta etapa é separar a imagem em partes ou objetos de interesse. Ao

identificar todos os objetos de interesse na imagem inicia-se então a etapa de obtenção de

dados. Esta etapa nos permitirá obter dados numéricos no qual algumas características dos

objetos nas imagens são extraídas. Após todo o processo se inicia novamente, analisando as

várias imagens de um vídeo em tempo real.

3.1 Dimensionamento da plafaforma e posicionamento da câmera

Afim de extrair dados sobre os peixes torna-se necessário que esses peixes estejam

inseridos em uma bacia com água e que a câmera esteja em condições de obter as imagens dos

mesmos.

Para este projeto foi desenvolvido então um protótipo de uma plataforma onde é

possível posicionar os peixes, junto com um suporte para a câmera, no qual será posicionada a

uma altura H acima da plataforma, como é mostrado na Figura 11.

Figura 11 – Plataforma para fixação da câmera e posicionamento dos peixes.

Fonte: O Autor.

As dimensões da bacia podem sem escolhidas de maneira com que caibam os peixes a

serem processados. Já a câmera deve ser posicionada acima da plataforma, podendo a altura H

para o posicionamento ser arbitrária e escolhida pelo projetista de modo que possibilite

capturar imagens no qual possuam todos os peixes ilustrados.

Page 19: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

19

Esta plataforma, no qual foi feita em acrílico, foi projetada com a ajuda do software

AutoCAD e do software Maker Case disponível no site “www.makercase.com”. Visto que

todas as medidas no dimensionamento dos elementos podem ser arbitrárias, sendo as

calibragens para cálculo dos peixes processadas numericamente, este projeto pode ser

portável e facilmente adaptável para outros meios onde a bacia para posicionamento dos

peixes tenham diferentes obstáculos e restrições.

3.2 Instalação da biblioteca OpenCV 3.1

Esta é uma biblioteca Open Source de processamento de imagens disponível para

várias linguagens de programação, dentre elas as linguagens Python, C/C++ e Java. Como

iremos trabalhar com um sistema operacional Raspbian, baseada no sistema Linux,

utilizaremos então a linguagem de programação Python 2.7.

Será demonstrada a instalação desta biblioteca para o sistema Linux na parte de

“Aplicação da Metodologia” no item 4, onde todos os passos serão explicados. A biblioteca

OpenCV está disponível para as mais diversas plataformas no site “opencv.org”, onde são

apresentados também tutorias para a sua instalação dependendo da linguagem e plataforma a

ser utilizada.

3.3 Aquisição de Imagens

Após ser concluída a instalação da biblioteca OpenCV, podemos então começar a

parte de processamento de imagens. A primeira coisa a se fazer é a aquisição de imagens, que

serão provenientes de vídeos em tempo real capturados por uma camera com cabo USB.

O projeto será destinado, além da contagem dos peixes, à obtenção de medidas dos

mesmos e para isso não é necessária que a resolução das imagens sejam de alta definição.

Para aumentar a rapidez de processamento é recomendável a captura de videos com uma

resolução de 640x480 pixels a uma taxa de 32 fps, uma resolução mais baixa, mas que não

prejudicará na obtenção dos dados.

Ao fazer a captura de uma imagem proveniente de um vídeo, esta imagem estará no

formato RGB, visto que a câmera faz vídeos coloridos. Para facilitar as próximas etapas de

processamento e também para diminuir a quantidade de dados a serem processados, torna-se

necessário transformar a imagem obtida do formato RGB para escalas de cinza, deixando assim

o processamento mais rápido.

Page 20: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

20

3.4 Binarização

Esta etapa consiste em reduzir a quantidade de informações contida em uma imagem,

com o objetivo de deixar na imagem apenas as informações relevantes, neste caso

características referentes aos peixes. Para que isso seja feito será necessário utilizar as

ferramentas de histograma e threshold.

O histograma fornece a quantidade de pixels que cada nível de cinza, compreendidos

de 0 a 255, está representado em uma imagem. Com ele é possível identificar quais níveis de

cinza estarão representados os peixes.

Após identificar os níveis de cinza com o qual estão representados os peixes, pode-se

usar a técnica de threshold. Esta técnica permite binarizar a imagem, deixando na imagem

apenas as informações com os níveis de cinza pertinentes aos peixes. Assim, em todos os

pixels que representam os peixes será atribuído o nível 255, cor branca, enquanto as outras

informações desnecessárias contidas na imagem receberão o valor 0, cor preta.

3.5 Filtros de Imagem

Como será apresentado nas próximas etapas, para que seja possível obter dados dos

objetos na imagem, os objetos serão identificados através do método dos contornos. Após

uma imagem ser binarizada as bordas dos objetos, que estarão na cor branca, poderão ter

descontinuidades, resquícios de outros objetos que não nos interessam como por exemplo a

interferência da luz na câmera e outros possíveis pequenos problemas que podem dificultar

nas próximas etapas.

Afim de realizar melhoramentos para o processamento das próximas etapas ou para a

redução de dados a serem processados nas áreas de interesse, serão utilizadas algumas

técnicas conhecidas como filtro de imagens, sendo elas as técnicas de Erosão, Dilatação e

Suavização.

A técnica de Erosão, como o próprio nome diz, irá corroer as bordas dos objetos

contidas na imagem. Se algum determinado objeto for muito pequeno, com a aplicação da

erosão este objeto irá ser corroído até desaparecer, dependendo do nível de erosão. Caso os

peixes estejam em contato um com o outro, estará representado na imagem apenas um objeto.

Esta técnica será então uma ferramenta muito útil também para separar objetos, possibilitando

que os peixes se movam e colidam uns com os outros que ainda assim será possível identificá-

los através da técnica de contornos e extrair os dados desejados.

A aplicação da erosão causará o efeito negativo de diminuir o tamanho dos objetos.

Para este projeto o objetivo é extrair as medidas de comprimento dos peixes e se apenas ser

Page 21: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

21

aplicado a técnica de erosão, serão obtidas medidas inexatas. Para suprir este problema, após

utilizar a técnica de erosão, pode-se utilizar a técnica de dilatação. Como o próprio nome já

sugere, esta técnica irá dilatar as bordas dos objetos da imagem. Afim de repor a informação

perdida com a erosão, usa-se a dilatação na mesma proporção que a erosão foi feita,

recuperando as informações de medidas dos peixes.

Com a técnica de dilatação, em consequência de os objetos terem suas bordas

aumentadas, poderemos ter algumas descontinuidades em suas bordas ou mesmo alguns

ruídos. Afim de reparar esses possíveis problemas nas bordas dos objetos será aplicada a

técnica de suavização. Esta técnica irá suavizar as bordas dos objetos, reparando possíveis

problemas. Para as próximas etapas, é crucial a identificação das bordas dos objetos, sendo

indispensável a correção de possíveis problemas com os mesmos.

3.6 Identificação de Objetos

Para a identificação dos objetos em uma imagem serão aplicados os conceitos de

vizinhança-8 entre pixels. Com o conceito da vizinhança de pixels é possível implementar a

técnica dos contornos, no qual com uma varredura na matriz de pixels são identificados nos

objetos da imagem pontos contíguos em suas bordas possuindo a mesma cor ou intensidade.

A técnica dos contornos analisa toda a imagem e cria vetores com coordenadas de

pixels, no qual cada vetor possui todas as coordenadas das bordas de um objeto na imagem,

sendo declarado um vetor para cada objeto. Essas bordas são sempre fechadas, ou seja, a

coordenada de início de um contorno é também a coordenada de término do mesmo. Após a

atribuição dos vetores de coordenadas, todos esses vetores são indexados em um único vetor,

sendo este último o vetor de objetos.

A detecção dos contornos de objetos é importante pois sabendo suas coordenadas,

podemos obter várias informações sobre os objetos como área, perímetro, comprimento,

largura, formas e quantidade de objetos.

Esta técnica necessita que as imagens em análise sejam binárias, ou seja, na cor preta e

branca sendo que os objetos de análise estejam na cor branca e inseridos em um fundo preto,

para que funcione com eficiência e precisão. Aqui se percebe que as etapas anteriores são,

portanto, indispensáveis para esta etapa de detecção de objetos onde é indispensável o uso da

técnica de binarização com threshold antes de aplicarmos a técnica dos contornos.

Page 22: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

22

3.7 Obtenção de Dados

Ao aplicar a técnica dos contornos, são identificados todos os objetos da imagem e

obtidas as suas coordenadas que são armazenadas em vetores. Deve-se então fazer uma

filtragem de dados para ignorar os objetos que não são do nosso interesse e assim serão

identificados quais contornos correspondem aos peixes. Deste modo é possível então saber

qual a quantidade de peixes que estarão contidos na bacia e como já foram identificadas as

coordenadas dos pixels correspondentes aos peixes, pode-se identificar as suas respectivas

cores a partir da imagem original no formato colorido RGB.

Com as coordenadas dos peixes identificadas, será possível usar o método da razão de

aspectos para obter as medidas dos peixes. Este método adaptativo, no qual pode ser

facilmente aplicado com a biblioteca OpenCV, irá analisar as coordenadas dos peixes e irá

enquadrar cada peixe em um retângulo, no qual o comprimento do peixe será o comprimento

maior do retângulo, medida conhecida como calibre máximo ou FERETMAX.

Esta medida do calibre máximo que nos fornece o comprimento do peixe é uma

medida dada em pixels. É necessário então converter o comprimento dos peixes em pixels

para centímetros. Para isto, utiliza-se um objeto com medidas conhecidas e em ele é extraído

um valor de offset, no qual este valor será uma constante de calibre correspondente à altura H

da câmera. Aplica-se a seguinte conversão mostrada na fórmula 2 a seguir.

(2)

A constante de offset, que fará a conversão da medida dos peixes de pixels para

centímetros, é calculada usando qualquer objeto com comprimento conhecido para a

calibração dos valores recebidos pela câmera. Para saber o seu valor numérico é preciso saber

o comprimento real de algum objeto e dividi-lo pelo valor de calibre máximo medido em

pixels encontrado através do processamento.

O comprimento real dos objetos a serem mensurados dar-se-á, portanto, pela equação

3, onde o comprimento dos peixes com unidade em centímetros será obtido através da

multiplicação do valor medido em pixels pelo valor de offset calculado.

(3)

Page 23: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

23

O valor de offset encontrado será a constante correspondente à altura H da câmera em

relação aos peixes. Logo, se ocorrer variação da altura H deverá ser feita nova calibragem da

câmera, caso contrário serão fornecidas medidas com valores incorretos.

Page 24: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

24

4 APLICAÇÃO DA METODOLOGIA PROPOSTA

Para o desenvolvimento do projeto são necessárias algumas ferramentas, as quais

encontram-se listadas abaixo.

Um Raspberry Pi 2 Model B com câmera;

Um teclado com saída USB;

Um monitor com entrada HDMI;

Uma bacia aquática com suporte para o Raspberry Pi.

Com posse destes materiais pode-se iniciar o desenvolvimento do projeto. A seguir

serão apresentadas todas as etapas do projeto, inicialmente mostrando como foi desenvolvida

a bacia aquática e posteriormente entrando em detalhes na parte de processamento de

imagens.

4.1 Dimensionamento da plafaforma e posicionamento da câmera

A plataforma no qual serão colocados os peixes e posicionada a câmera, mostrada na

Figura 12, foi desenvolvida com a ajuda dos softwares AutoCAD e Maker Case. Foi impressa

com material acrílico e vedadas todas as suas conexões para impedir a passagem de água.

Figura 12 – Plataforma feita em acrílico.

Fonte : O Autor.

Page 25: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

25

As dimensões da bacia foram arbitrárias, com largura de 210 mm, comprimento de

280mm e profundidade de 50 mm. A câmera irá ser posicionada a uma altura H = 45 cm,

altura na qual irá possibilitar a câmera de capturar imagens dos peixes em boa qualidade.

Após a confecção da plataforma, faz-se necessário agora conectar o teclado e o

monitor ao microcomputador para que seja possível utilizá-lo. Após a conexão dos periféricos

é preciso posicionar e ajustar adequadamente a câmera para que possibilite capturar imagens

dos peixes sem cortes ou interferências.

4.2 Instalação da biblioteca OpenCV 3.1

No Anexo A é apresentado um tutorial para fazer a instalação da biblioteca OpenCV

versão 3.1.0 e das ferramentas de desenvolvimento em liguagem Python versão 2.7 no

Raspberry Pi 3 Modelo B, para que seja possível processar imagens em linguagem Python.

4.3 Aquisição de Imagens

A aquisição de imagens é feita a partir da câmera do Raspberry Pi em formato de cores

RGB. Para que seja possível utilizá-la é necessário primeiro habilitá-la a partir das

configurações do microcomputador.

No programa a ser compilado, inicialmente inicializa-se a câmera para a captura de

vídeos. Os vídeos serão capturados com resolução de 640x480 pixels com taxa de 32 frames

por segundo.

As linhas de código para estes procedimentos são apresentadas a seguir:

Todos os comandos das etapas subsequentes deverão estar dentro de um loop, para que

se permita a captura e processamento de imagens periodicamente. Após a inicialização da

câmera, são extraídas imagens periódicas do vídeo em tempo real com a seguinte linha de

código, que está inserida em um loop:

Page 26: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

26

Assim obtém-se a imagem da Figura 13.

Figura 13 – Imagem no formato RGB

Fonte : O Autor.

4.4 Binarização

A imagem adquirida na etapa anterior está no formato RGB. Antes de prosseguir para

as próximas etapas é necessário transformar a imagem colorida para tons de cinza, no qual

cada pixel possuirá uma intensidade entre o valor 0 e 255, para que seja possível fazer a

segmentação.

A conversão da imagem colorida para tons de cinza pode ser feita com a função

cvtColor da biblioteca OpenCV, como verifica-se abaixo:

A partir da conversão a imagem adquirida pela câmera apresentada na Figura 13,

ficará como mostra a imagem da Figura 14.

Page 27: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

27

Figure 14 – Imagem em tons de cinza

Fonte : O Autor.

Obtemos agora o Histograma da Figura 14 para saber quais tons de cinza representam

os objetos de interesse. A obtenção do histograma pode ser feita com as linhas de código a

seguir.

Esses comandos apresentarão o histograma da Figura 14, no qual mostra a quantidade

de pixels que estão representados com cada nível de tons de cinza, como se pode ver na

Figura 15.

Page 28: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

28

Figura 15 – Histograma da Figura 14

Fonte : O Autor.

Analisando o histograma na Figura 15, podemos aplicar a técnica de threshold para

fazer a segmentação dos objetos. A técnica de threshold permite binarizar a imagem,

selecionando os níveis de tons de cinza que representam as informações desejadas e

transformando os pixels com estes níveis para a cor branca, com valor 255. Os pixels que

possuírem valores diferentes dos que são representados pelos objetos de interesse serão

transformados para o valor 0, representado pela cor preta.

Esta técnica irá permitir fazer a detecção dos objetos na imagem, no qual possuirá

como resultado uma imagem com as informações referentes aos peixes destacadas com

apenas dois níveis de cores. Sua implementação consiste em limitar um valor mínimo e um

valor máximo de intensidade no qual estará o range de níveis de cinza que possuirão

informações úteis, valores que são fornecidos pelo histograma da Figura 15. Outra opção para

escolher os valores delimitadores do threshold é por tentativa e erro. Aplica-se o threshold

conforme as seguintes linhas de comandos:

Como resultado da segmentação a partir do threshold a Figura 14 será transformada

então na Figura 16

Page 29: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

29

Figure 16 – Imagem binarizada.

Fonte : O Autor.

4.5 Filtros de Imagem

Após a segmentação dos objetos de interesse, é importante aplicar algumas técnicas

para reduzir alguns detalhes que possam dificultar o reconhecimento dos objetos, tornando a

próxima etapa mais eficaz.

Inicialmente, após a aplicação do threshold na etapa de binarização, usa-se a técnica

de dilatação para unir pontos remanescentes dos objetos da Figura 16, com a função dilate

apresentada a seguir, disponível na biblioteca Opencv.

Esta técnica aplicada na imagem da Figura 16 resulta na imagem da Figura 17.

Page 30: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

30

Figura 17 – Resultado da função Dilate

Fonte : O Autor.

Nota-se a partir da Figura 17 que a função dilate torna o contorno dos objetos mais

uniformes, facilitando assim a detecção de contornos na etapa de identificação de Objetos.

Como esta aplicação é destinada a obter característica de peixes, que podem colidir-se

uns contra os outros, torna-se necessário a utilização da técnica da erosão para separar objetos

unidos. Esta técnica pode ser aplicada com a função erode disponível na biblioteca Opencv,

de acordo com o seguinte comando:

A aplicação desta função na Figura 17 resulta na Figura 18.

Figura 18 – Resultado da função Erode

Fonte : O Autor.

Page 31: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

31

A técnica da erosão ajuda também a eliminar informações que não são de interesse,

como pequenos pontos que sobram como vestígios após a segmentação, sendo eliminados

dependendo e sua área e grau de erosão aplicado.

Para reduzir os ruídos na imagem, aplica-se a função blur disponível na biblioteca

Opencv, o qual irá suavizar as bordas dos objetos segmentados, com a seguinte linha de

comando:

Aplicando esta técnica na Figura 18, tem-se como resultado a Figura 19.

Figura 19 – Resultado da aplicação Blur

Fonte : O Autor.

4.6 Identificação de Objetos

Para adquirir características de objetos é necessário conhecer as suas coordenadas na

matriz de pixels da imagem. A biblioteca OpenCV fornece ferramentas que identificam todas

as bordas dos objetos na imagem, sendo elas as funções Canny e FindContours.

A função Canny irá analisar a imagem da etapa anterior e irá criar uma nova imagem,

no qual serão inseridas apenas as informações referentes às bordas de todos os objetos. A

função FindContours irá ter como entrada a imagem de saída da função Canny, irá encontrar

todas as bordas que possuem disposição fechada, as quais representam os objetos na imagem,

Page 32: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

32

e armazenar as coordenadas destes objetos em matrizes, as quais serão indiciadas em um vetor

de contornos. Cada índice nesse vetor representará um objeto na imagem.

A função Canny pode ser aplicada com a seguinte linha de comando abaixo e a

imagem de saída edges está representada na Figura 20.

Figura 20 – Imagem de saída da função Canny

Fonte : O Autor.

Aplica-se agora a função FindContours com a seguinte linha de comando:

Pode-se ver o resultado desta aplicação na imagem da Figura 21, no qual todos os

contornos encontrados são representados, no qual foram preenchidos com o nível 255 para

reduzir o número de informações.

Page 33: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

33

Figura 21 – Contornos dos objetos

Fonte : O Autor.

Ao adquirir as coordenadas dos objetos na imagem, teremos que selecionar quais

contornos são relativos ao objeto que se quer extrair dados, pois o vetor de objetos também

possui coordenadas de contornos relativo a sombras na imagem e interferências causadas pela

luminosidade. Deve-se então aplicar um filtro de contornos, afim de remover as coordenadas

irrelevantes.

Pode-se usar como filtro de contornos o cálculo da área de cada objeto, onde todos os

objetos que possuem uma área em pixels inferior à área definida como mínima serão

descartados. Após esse filtro restarão no vetor de coordenadas apenas as coordenadas relativas

aos objetos de interesse, pois normalmente os objetos de maiores áreas na imagem são os

desejados enquanto os outros contornos frequentemente possuem área muito menor. Dentro

de um loop para fazer a análise de todos os índices da matriz de contornos, o filtro de área

pode ser aplicado com um comando if da seguinte maneira, onde para o nosso caso é

suficiente um filtro de área de 400 pixels:

Após a aplicação do filtro e área e serem descartados os objetos irrelevantes, tem-se

apenas as coordenadas de identificação relativas aos objetos de interesse, representados na

Figura 22, e agora é possível extrair características dos mesmos.

Page 34: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

34

Figura 22 – Objetos de Interesse

Fonte : O Autor.

4.7 Obtenção de Dados

Após a aplicação do filtro de área nos objetos nos restaram no vetor de contornos

apenas as coordenadas relativas aos peixes. Para extrair os dados dos mesmos é necessário

processar um índice do vetor de cada vez. Para isso isso utiliza-se um loop no qual com base

nas coordenadas dos contornos dos peixes será possível extrair o comprimento e a cor de cada

peixe. Assim, pode-se saber a quantidade de peixes apenas criando uma variável inteira que

irá ser incrementada a cada vez que for extraída os dados dos contornos dos peixes,

informando ao final do loop a quantidade de peixes presentes.

Inicia-se a análise para extrair o comprimento de cada peixe à partir do íncice 0 do vetor

de contornos. Para extrair o comprimento dos peixes utilizaremos a técnica de Razão de

Aspectos, no qual irá analizar as coordenadas do contorno e irá adaptar um retângulo, no qual

o comprimento do retângulo nos informará o comprimento do peixe. Dentro de um loop para

analizar todos os índices do vetor de contornos, a Razão de Aspectos é aplicada com as

seguintes linhas de comando, utilizando a função minAreaRect, fornecida pela biblioteca

OpenCV:

Page 35: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

35

O retângulo criado se adapta ao objeto não importando a sua direção de movimento ou

ângulo de orientação, o que permite aos peixes mover-se livrementes. Para saber então o

comprimento do FeretMax que nos fornecerá o comprimento do peixe medido em pixels,

devemos saber quais são as coordenadas dos cantos do retângulo criado, que são forncecidas

pela função boxPoints, como mostram os comandos abaixo.

O retangulo adaptado para cada objeto ficará disposto como na Figura 23.

Figura 23 – Retângulo fornecido pela aplicação da Razão de Aspectos

Fonte : O Autor.

A partir das coordenadas dos quatro cantos do retângulo, pode-se então calcular o

comprimento do peixe apenas medindo a distância do comprimento do retângulo, aplicando a

fórmula 4:

(4)

Page 36: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

36

Para a impletentação da fórmula 4, visto que o retângulo criado pode estar com

angulos de orientações variados devemos calcular a distância euclidiana dos pontos, pois a

matriz de pixels de uma imagem contém indices estáticos e o retângulo pode estar orientado

em qualquer direção. Aplica-se então a fórmula 5.

√ (Pixels) (5)

Pode-se também usar os outros dois pontos do retângulo (y2, x2) e (y3, x3) para

calcular o comprimento. Opcionalmente pode-se calcular a largura dos peixes a partir destes

pontos. Faz-se o cálculo do comprimento com as seguintes linhas de comando:

O comprimento encontrado está medido em pixels e, portanto, não é o valor real do

peixe em centímetros. Deve-se então converter este valor com unidade em pixels para

centímetros. Para isso multiplica-se então o comprimento em pixels por um valor de offset,

que será encontrado utilizando um objeto com comprimento conhecido. Adquire-se a imagem

desse objeto e obtém-se o valor calculado em pixels fornecida pela fórmula 5, após calcula-se

o valor do offset a partir da fórmula 2.

(2)

O comprimento em centímetros é então adquirido aplicando a fórmula 3.

(3)

Page 37: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

37

Podemos agora apresentar todos os resultados na imagem de origem em formato RGB.

Na figura Figura 24 está representada a imagem final com todas as informações desejadas,

com a quantidade de objetos e o comprimento de cada um deles.

Figura 24 – Imagem final com os resultados

Fonte : O Autor.

Após o fim da extração de dados, como o processo está em um loop, inicia-se

novamente a captura de imagens a partir da câmera e é feito todo o processamento novamente

para as próximas imagens, permitindo assim fazer o processamento com video em tempo real.

Page 38: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

38

5 CONCLUSÃO

Os dados extraidos condizem com os dados reais dos peixes. O principal problema a

ser resolvido na adaptação da camera para outras plataformas é a interferência causada pela

luminosidade que degrada a qualidade das imagens. Esse problema pode ser resolvido com

outros métodos de processamento de imagens ou com a instalação da câmera em uma

plataforma onde as luzes fiquem dispostas de modo que não causem problemas.

Com a plataforma que foi desenvolvida a interferência da luz na câmera pode resultar em um

erro de até 2 mm no cálculo do comprimento dos peixes, uma valor de 3% em relação ao

tamanho real, erro considerado pequeno. A interferência na iluminação também resulta em

uma dificuldade em separar objetos, como por exemplo se dois peixes estiverem unidos.

Como foi visto para o dimensionamento da plataforma e altura da câmera as medidas

podem ser arbitrárias, o único requisito é que a câmera seja capaz de capturar imagens

completas e com qualidade. Isso permite que o sistema possa ser facilmente adaptado para

qualquer ambiente com diferentes restrições.

Após fazer a instalação da câmera na plataforma e fazer o cálculo do offset para a

calibragem da câmera com a altura H, essa altura da câmera em relação a plataforma não pode

variar, caso contrário haverá erros de cálculo e será necessário fazer um novo cálculo de

offset. Por isso é importante que a plataforma a ser desenvolvida possua uma certa

estabilidade.

O sistema desenvolvido possibilita a extração de dados dos peixes sendo que não

existem restrições às dimensões dos mesmos, diferenciando-se dos outros sistemas de

extração de dados de peixes disponíveis no mercado.

Apesar de ter-se feito o projeto com o microcomputador Raspbarry Pi, este projeto

pode ser desenvolvido com diferentes plataformas. Para que o projeto seja portável foi

desenvolvido na placa versão 3 Modelo B, que é mais rápido em relação ao Raspbarry Pi

versão 1 e 2 e cumpre aos requisitos do projeto, mas mesmo assim não possui uma velocidade

de processamento realmente boa. Se um dos requisitos para o projeto for velocidade no

processamento, é necessário que o sistema seja desenvolvido em um sistema computacional

com maior poder de processamento.

Page 39: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

39

6 REFERÊNCIAS

GONZALES, Rafael C.; WOODS, Richard E. Processamento de Imagens Digitais. São

Paulo: Pearson Education do Brasil, 2010.

MOESLUND, Thomas B.; Introduction to Video and Image Processing. London: Springer,

2012.

BRADSKI; KHAELER; Learning OpenCV. USA: O‟Reilly Media, 2008.

MARQUES FILHO, Ogê; VIEIRA NETO, Hugo. Processamento Digital de Imagens, Rio de

Janeiro: Brasport, 1999.

GOMES, J.; VELHO, L. Computação Gráfica: Imagem. Rio de Janeiro: IMPA, 2002.

KARES, Augusto; Identificação Automática do Grau de Maturação de Pelotas de Minério de

Ferro. Rio de Janeiro, PUCRIO, 2013

PRESTES, Lucas; PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO

SUL, Faculdade de Engenharia. Instrumento Portátil para Aquisição, Digitalização e

Processamento de Imagens a ser Aplicado na Avaliação do Sistema de Equilíbrio Humano,

2013. Tese (Mestrado em Engenharia).

SILVA, Almeida; UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE, Sistema

de contagem automática de objetos utilizando processamento digital de imagens em

dispositivos móveis, 2014. Dissertação (Mestrado em Ciência da Computação).

AUGUSTO, Karen Soares; PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO DE

JANEIRO, Departamento de Engenharia de Materiais. Identificação automática do grau de

maturação de pelotas de minério de ferro, 2012. Dissertação (Mestrado em Engenharia de

Materiais).

Page 40: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

40

ANEXO A

7 INSTALAÇÃO DA BIBLIOTECA OPENCV 3.1

Todas as etapas a seguir necessitam que o Raspberry Pi tenha acesso à internet para

fazer todos downloads necessários. Não serão detalhadas todas as funcionalidades das

bibliotecas a serem instaladas. As instruções para a instalação de qualquer versão da

biblioteca OpenCV pode ser encontradas no site “raspberrypi.org”.

7.1 Instalação de Dependências

Primeiramente é importante atualizar algumas bibliotecas já instaladas no

microcomputador. Para isso é necessário abrir o terminal e inserir os seguintes comandos :

$ sudo apt-get update

$ sudo apt-get upgrade

Será instalado agora o compilador CMAKE, requerido para instalar a biblioteca

OpenCV :

$ sudo apt-get install build-essential cmake pkg-config

É necessario o uso algumas bibliotecas de imagens complementares para a leitura de

imagens com a câmera. Esses pacotes nos permitem fazer a leitura de diferentes formatos de

imagem tais como os formatos JPEG, PNG, TIFF, entre outros.

$ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev

As bibliotecas a serem instaladas a seguir permitem obter videos em tempo real.

$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

$ sudo apt-get install libxvidcore-dev libx264-dev

Instala-se agora a biblioteca de desenvolvimento GTK. Essa biblioteca é necessária

para construir interfaces gráficas para apresentação dos resultados e é utilizada pela biblioteca

HIGHGUI disponível no Opencv, que permite visualizar as imagens diretamente no monitor.

$ sudo apt-get install libgtk2.0-dev

Biblioteca para otimizar operações com a biblioteca OpenCV.

Page 41: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

41

$ sudo apt-get install libatlas-base-dev gfortran

Instala-se as ferramentas python 2.7 e também a versão python 3 para poder gerar os

binários que possibilitam instalar a biblioteca OpenCV para trabalhar com Python.

$ sudo apt-get install python2.7-dev python3-dev

7.2 Download OpenCV

Agora que todas as dependências necessárias estão instaladas podemos baixar a

biblioteca OpenCV 3.1.

$ cd ~

$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip

$ unzip opencv.zip

Instala-se uma ferramenta “opencv-contrib” que possibilita fazer um repositório

necessário para algumas funções da biblioteca OpenCV.

$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip

$ unzip opencv_contrib.zip

7.3 Criação de um Ambiente Virtual

Antes de compilarmos a biblioteca OpenCV, necessitamos da ferramenta “pip” que

funciona como um gerenciador da linguagem Python.

$ wget https://bootstrap.pypa.io/get-pip.py

$ sudo python get-pip.py

É necessário criar um ambiente virtual que faça a ligação da biblioteca OpenCV com a

liguagem Pyhton para fazer a compilação da biblioteca. Para isso instala-se as

bibliotecas “virtualenv” e “virtualenvwrapper”.

$ sudo pip install virtualenv virtualenvwrapper

$ sudo rm -rf ~/.cache/pip

É necessário agora atualizar o arquivo ~/.profile e incluir as linhas a seguir.

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

Após salvar as alterações, insere-se o comando abaixo.

Page 42: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

42

$ source ~/.profile

Cria-se agora o ambiente virtual com o qual usaremos para desenvolver aplicações

com processamento de imagens.

$ mkvirtualenv cv -p python2

Esse comando cria um ambiente virtual chamado “cv” permitindo usar a ferramenta

python. Falta agora instalar a ferramenta “numpy”, um pacote com ferramentas em linguagem

python usadas para desenvolver aplicações.

$ pip install numpy

7.4 Compilando e instalando a biblioteca Opencv 3.1

Será feita agora a compilação da biblioteca OpenCV. É importante que o ambiente

virtual cv criado na Parte 8 esteja ativado, uma vez que a biblioteca OpenCV é compilada com

as ferramentas Python e NumPy da Parte 9. Caso o ambiente cv não esteja ativado, o OpenCV

será compilado de maneira que possa ser incompatível com algumas funcionalidades das

ferramentas Python e NumPy e assim acarretar em erros.

$ cd opencv-3.1.0

$ mkdir build

$ cd build

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D

CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D

INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D

BUILD_EXAMPLES=ON ..

Inserimos então o seguinte comando, que levará em torno de três horas para ser

concluído :

$ make -j4

O comando -j4 habilita o microcomputador a usar seus 4 núcleos, tornando a

compilação mais rápida. Após a compilação, finalmente é possível agora instalar a biblioteca

OpenCV :

$ sudo make install

$ sudo ldconfig

Page 43: PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL ... · tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de cinza possíveis. A imagem

43

A biblioteca OpenCV foi instalada no local /usr/local/lib/python2.7/site-packages.

Para permitir utilizá-la no ambiente virtual cv criado anteriormente, deve-se inserir os

comandos a seguir.

$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/

$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

$ ln -s /usr/local/lib/python2.7/site-packages/cv.py cv.py

Todas as ferramentas necessárias para o desenvolvimento do projeto estão prontas

para serem usadas. É necessário, antes de cada utilização das bibliotecas, inserir o seguinte

comando:

$ source ~/.profile

$ workon cv

Em seguinda, pode-se compilar o arquivo com o algoritmo que foi desenvolvido:

$ python TCC.py

Para a instalação da biblioteca OpenCV em outros sistemas operacionais pode-se

consultar o site „„opencv.org‟‟.