• Nenhum resultado encontrado

A região de interesse ou Region of interest (ROI) é por definição a delimitação da área em que se busca obter as informações necessárias para o bom funcionamento do código, onde as informações desnecessárias ou sem muita relevância devem ser suprimidas.

Para esse trabalho em específico, informações como faixa e movimentação de pedestres, calçadas e linhas delimitadoras de pistas foram retiradas para não exer-

cerem processamento desnecessários e nem gerarem erros de detecção durante a rotina do algoritmo.

Para a retirada das informações desnecessárias, foram utilizados polígonos em regiões estratégicas, onde essas formas geométricas ocultam os espaços deseja- dos e mostram apenas a área de interesse do estudo, como pode-se o comparativo na Figura 11:

Figura 11 – Resultado da definição da região de interesse.

(a) Imagem em escala de cinza. (b) Região de interesse aplicada. Fonte: Autoria Própria.

3.3 EQUALIZAÇÃO DE CONTRASTE

A equalização de contraste tem como principal função aperfeiçoar a qualidade da imagem obtida, facilitando o alcance de reconhecimento de padrões através da visão computacional. Em geral, a definição do aperfeiçoamento do contraste para cada aplicação é feita de maneira empírica, onde é comum a utilização de histogramas para a análise de contraste em imagens. Dessa maneira é possível ter uma melhor visualização do comportamento do nível de cinza a cada quadro, relacionando esse com o número de pixels existente na imagem.

No histograma, a análise é possível pela comparação do número de pixels em relação ao nível de cinza, variando este numa escala de 8 bits, gerando 256 valores possíveis. Para cada pixel na imagem, o seu valor pode variar de 0, sendo um pixel totalmente escuro, e 255, gerando esse com o maior tom de cinza possível.

Para a aplicação do código foi utilizado a função Equalização de Histograma Adaptativo Limitada ao Contraste (ou Contrast Limited Adaptive Histogram Equaliza- tion (CLAHE), sigla em inglês). Em termos simples, a CLAHE é uma melhora do mé- todo chamado aprimoramento adaptativo de contraste (Adaptative Histogram Equali-

zation (AHE)), onde na CLAHE é possível gerar alterações de valores como fator de máximo contraste e altura máxima do histograma pelo usuário (PISANO et al., 1998). Essa função necessita de duas variáveis para seu funcionamento quando apli- cada: o valor do limiar para a limitação do contraste e o tamanho da matriz, que será utilizada para dividir a imagem em retângulos de mesmo tamanho.

Através dessa função foi possível realizar uma análise empírica dos melho- res valores para a geração de resultado satisfatórios, onde o Gráfico 1 e o Gráfico 2 mostram um exemplo de um quadro do video com o seu histograma original e com o ajuste de contraste, respectivamente.

Gráfico 1 – Histograma da imagem em escala de cinza.

0

50 100 150 200 250

Valor do pixel

0

2000

4000

6000

Quantidade de pixels

Fonte: Autoria Própria.

Gráfico 2 – Histograma com o ajuste de contraste.

0

50 100 150 200 250

Valor do pixel

0

2000

4000

6000

Quantidade de pixels

Fonte: Autoria Própria

Figura 12 – Diferença entre imagem em escala de cinza e com o ajuste de contraste aplicado.

(a) Imagem em escala de cinza. (b) Imagem com o ajuste de contraste aplicado. Fonte: Autoria Própria.

3.4 TRANSFORMAÇÃO DE PERSPECTIVA

A Transformação de Perspectiva pode ser definida como uma projeção num plano homográfico através de um conjunto de pontos obtidos no plano de referência. Para a determinação do plano homográfico, é necessário o cálculo da matriz homo- gráfica, a partir da função cv2.findHomography(), onde são utilizados pontos do plano referência para o cálculo.

A mudança de plano é dada pela Equação 4:

𝑠𝑖· ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ 𝑥′𝑖 𝑦𝑖′ 1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ = 𝐻 · ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ 𝑥𝑖 𝑦𝑖 1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ (4) Onde: • 𝐻: Matriz homográfica • 𝑠𝑖: Fator de escala

• (𝑥′𝑖, 𝑦′𝑖): Ponto no plano homográfico

• (𝑥𝑖, 𝑦𝑖): Ponto no plano referência

A utilização da transformação de perspectiva se faz necessária para posterior- mente simplificar a modelagem matemática da estimativa da velocidade e por facilitar a detecção do veículos. O objetivo dessa transformação é alterar de forma aproximada o ponto de vista da câmera, onde no método proposto optou-se por uma vista de cima da rua. Esse ângulo garante que por toda a passagem do veículo o tamanho que o pixel representa no plano real não se altera.

Para realizar esse processo escolhe-se quatro pontos das extremidades que representam a faixa no quadro original e em seguida define-se a nova posição des- ses quatro pontos, onde para facilitar a aplicação da transformada e obter melhores resultados, foram separadas cada uma das faixas e aplicada a transformação de pers- pectiva separadamente. Dessa forma, os oito pontos por faixa são utilizados como pa- râmetro da função cv2.findHomography() que retorna a matriz homográfica (3×3) utilizada na transformação de linear da Equação 4.

Figura 13 – Exemplo das escolhas dos pontos para a Faixa 1.

Fonte: Autoria Própria.

O resultado da aplicação da transformação pode ser vista na Figura 14:

Figura 14 – Resultado da alteração de perspectiva de cada faixa.

(a) Faixa 1. (b) Faixa 2. (c) Faixa 3. Fonte: Autoria Própria.

A partir deste ponto, cada faixa tem sua própria imagem e para cada uma delas será feito os procedimentos descritos nas seções a seguir.

3.5 SUPRESSÃO DE FUNDO

A utilização das câmeras estáticas para a detecção e avaliação da velocidade veicular possibilita uma maior facilidade para a supressão de fundos estáticos nas

imagens obtidas, o que pode ser descrita como Background Subtractor (BGS). Atra- vés dessa técnica é possível a retirada de pixels que não se alteram ou que possuem pouca variação, onde somente objetos que geram modificações acima da limiar (th- reshold ) na imagem são detectadas.

Para o presente trabalho foi utilizado o método de background subtractor ba- seado no modelo estatístico Gaussiano. Esse método elucida que as imagens apre- sentadas frame a frame demonstram comportamentos bem definidos, podendo dessa maneira serem descritos por um modelo estatístico. Quando a sequência de imagens apresentam comportamentos que não se encaixam no modelo estatístico, este são definidos como um objetos intrusos, fazendo assim parte do foreground, ou seja, é um objeto que sofreu alteração de um frame a outro (ZIVKOVIC, 2004).

Para realizar essa análise, é feita a comparação dos valores do pixel da ima- gem de referência (background ) e do pixel da imagem subsequente de mesma posi- ção.

𝑝𝑖𝑥𝑒𝑙_𝑣𝑎𝑙𝑢𝑒 = | (𝑥 , 𝑦)1 − (𝑥 , 𝑦)𝑖−1| (5)

Onde:

• (𝑥 , 𝑦)𝑡−1 : Valor do pixel na posição (𝑥 , 𝑦) da imagem de referência. Valores

entre 0 e 255 devido a imagem estar em escala de cinza.

• (𝑥 , 𝑦)𝑡 : Valor do pixel na posição (𝑥 , 𝑦) do frame seguinte. (Valores entre 0 e

255)

A Equação 5 retorna também um valor entre 0 e 255 e esse valor indica a intensidade da mudança do valor do pixel analisado. Sendo que, valores baixos repre- sentam poucas mudanças e valores altos representam grandes mudanças. A matriz de pixel formada pelos valores da Equação 5 ainda não é uma imagem binária. Para realizar a conversão de uma imagem em escala de cinza para uma imagem binária, é necessário definir um valor de limiar (threshold ) e aplicar a Equação 6.

𝑏𝑖𝑛𝑎𝑟𝑦_𝑝𝑖𝑥𝑒𝑙 = ⎧ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎩ 0 para 𝑝𝑖𝑥𝑒𝑙_𝑣𝑎𝑙𝑢𝑒 < 𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑 255 para 𝑝𝑖𝑥𝑒𝑙_𝑣𝑎𝑙𝑢𝑒 > 𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑 (6)

3.6 OPERAÇÕES MORFOLÓGICAS

As operações morfológicas tem sua origem a partir da morfologia matemática, criada por Georges Matheron e Jean Serra, onde o seu principal escopo era o estudo de estruturas geométricas presente em imagens através de técnicas matemáticas. Essa operação tem como ideia principal a retirada de informações relativas a geo- metria da imagem através de conjuntos estranhos quando comparado ao chamado elemento estruturante (FACON, 2011).

Os elementos estruturantes, também conhecidos como kernels, podem ser definidos como uma imagem binária de prova, de pequeno tamanho se comparado a imagem que sofrerá as operações morfológicas, que terá a função de comparação. Esse elemento estruturante será posicionado em toda a imagem que se deseja realizar a operação, verificando se o elemento está ou não contido. Os kernels podem tomar qualquer forma desejada, como pode-se ver no exemplo a seguir:

𝑟𝑒𝑐𝑡3×3 = ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 1 1 1 1 1 1 1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ 𝑐𝑟𝑜𝑠𝑠3×3 = ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ 0 1 0 1 1 1 0 1 0 ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ 𝑣𝑒𝑟𝑡3×3= ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ 0 1 0 0 1 0 0 1 0 ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ (7)

Utilizou-se no algoritmo proposto as operações fundamentais das operações morfológicas binárias, a erosão e a dilatação. A ordem de aplicação das operações foi realizada de maneira que, primeiro fosse utilizado a operação erosão para a reti- rada de ruídos da imagem a ser analisada, para que posteriormente fosse aplicado a operação dilatação, gerando o ampliamento das informações necessárias.

3.6.1 Erosão

Nessa operação, é realizado a comparação do elemento estruturante por toda a imagem a ser verificada, onde deverá ser obtido duas informações, o fundo e os pixels relevantes. A cada pixel da imagem avaliada, a operação compara o pixel ana- lisado com a sua vizinhança. Se o mesmo possuir valor similar aos pixels com set 1 no elemento estruturante, o mesmo é considerado um pixel relevante. Se não houver uma comparação positiva, o mesmo será considerado fundo e será apagado. Para o

processo de erosão, definiu-se um elemento estruturante de forma quadrada 6 × 6, onde esse tamanho menor é suficiente para retirar todos os ruídos (partículas) gera- dos durante o processo de background subtractor, discutido na seção 3.5.

O resultado da operação de erosão pode ser visualizado na Figura 15b:

3.6.2 Dilatação

Nessa operação, o processo de comparação para a aplicação ou não da di- latação é análogo ao processo de erosão, onde o pixel avaliado é comparado a sua vizinhança através do elemento estruturante. Quando a comparação é positiva, o pixel é definido como relevante e é aplicado o processo de dilatação. Neste caso, definiu- se elemento estruturante de forma retangular com largura de 213 e altura 66 pixels. A largura maior é necessária para garantir que na imagem binária apareça um retân- gulo com suas laterais maiores que os limites da imagem. O resultado do processo de dilatação pode ser visto na Figura 15c:

Figura 15 – Resultado das operações morfológicas.

(a) Resultado do BGS. (b) Resultado da ero- são.

(c) Resultado da dilata- ção.

Fonte: Autoria Própria.

3.7 DETECÇÃO DE CONTORNOS

Segundo Bradski e Kaehler (2008), um contorno pode ser definido como uma sequência de pontos (𝑥,𝑦) que representam uma curva na imagem. A função cv2.findContours() implementada no OpenCV é baseada no método proposto

por Suzuki e Abe (1985). Este método tem como objetivo fazer uma análise estrutu- ral topológica da imagem binária, conseguindo apenas não só detectar as bordas do objetos, mas também classificá-las como bordas externas e internas. Através dessa classificação, é possível organizar os contornos de forma hierárquica, como pode ser visto no exemplo da Figura 16.

Figura 16 – Relação entre os componentes detectados (b) e relação entre as bordas detectadas (c).

S1 S5 S4 S2 B1 B2 B3 S3 B4 Frame background S1 1-component S2 hole S3 1-component S4 1 component S5 Frame outer border B1 hole border B2 outer border B3 outer border B4 (b) (c) (a)

Fonte: Suzuki e Abe (1985, p. 34).

Como uma das etapas deste trabalho é a detecção do veículo, a informação de contornos internos dos veículos é desnecessária, sendo mais importante o contorno externo principal que envolve todo o veículo. A Figura 17b apresenta a sequência de pontos obtidos pela função cv2.findContours() configurada para retornar apenas o contorno mais externo.

Figura 17 – Resultado obtido com a sequência de pontos do contorno.

(a) Resultado da dilata- ção. (b) Sequência de pon- tos do contorno. (c) Resultado final da detecção de contor- nos.

Fonte: Autoria Própria.

3.8 ENVOLTÓRIA CONVEXA

Um polígono 𝑃 pode ser classificado como convexo quando é possível posi- cionar dois pontos distintos quaisquer em sua região poligonal e o segmento formado entre esses pontos deve estar inteiramente contido nessa região. Essa definição pode ser vista através da Figura 18.

Figura 18 – Diferença entre um polígono convexo e não convexo.

Convexo Não Convexo

Fonte: Autoria Própria.

Para um dado conjunto de pontos 𝑆, o algoritmo de Envoltória Convexa ou Convex Hull tem como objetivo retornar uma sequência de pontos 𝐶(𝑆) que repre- sentam o menor polígono convexo que deve envolver todo o conjunto de pontos 𝑆 (SKLANSKY, 1982).

Uma das etapas do algoritmo proposto por Graham (1972) é a verificar se um ponto 𝑃 (𝑥, 𝑦) está a direita ou a esquerda de um segmento de reta formado por 𝑃0(𝑥0, 𝑦0)e 𝑃1(𝑥1, 𝑦1). Para isso calcula-se o determinante da matriz 𝐴 da Equação 8:

|𝐴| = ⃒ ⃒ ⃒ ⃒ ⃒ ⃒ ⃒ ⃒ ⃒ (𝑥1− 𝑥0) (𝑥 − 𝑥0) (𝑦1− 𝑦0) (𝑦 − 𝑦0) ⃒ ⃒ ⃒ ⃒ ⃒ ⃒ ⃒ ⃒ ⃒ (8)

Se o valor do determinante for maior que zero implica que 𝑃 (𝑥, 𝑦) está à es- querda do segmento de reta, se |𝐴| for menor que zero então 𝑃 (𝑥, 𝑦) está à direita do segmento de reta e se |𝐴| for igual à zero os três pontos são colineares.

O algoritmo de Graham (1972) calcula a envoltória convexa da seguinte ma- neira:

1. Cria-se três listas: pontos_da_envoltória, pontos_internos e pontos_- indefinidos. Inicialmente todos os pontos do conjunto 𝑆 encontram-se na lista dos pontos_indefinidos.

2. Encontra-se o ponto com o menor valor de coordenada Y, pois este ponto per- tence à lista de pontos_da_envoltória e será o ponto de refêrencia e de partida do algoritmo.

3. Precisa-se ordenar a lista de pontos_indefinidos utilizando o ponto de re- ferência. Esse ponto será a origem de um sistema de coordenadas polares e a partir dele é feita uma varredura de 0o à 180o e associa-se cada ponto com seu

ângulo. Com o valores dos ângulos organiza-se a lista pontos_indefinidos de forma crescente, do menor ângulo para o maior.

4. O ponto de referência é movido para a lista pontos_da_envoltória. Até que a lista de pontos_indefinidos esteja vazia, pega-se o primeiro ponto dessa lista e verifica-se se ele está a direita ou à esquerda do segmento de reta formado pelo primeiro ponto da lista de pontos_da_envoltória e o segundo ponto da lista de pontos_indefinidos. Caso o ponto de esteja à direita ele é movido para a lista de pontos_da_envoltória, caso contrário é movido para a lista de pontos_internos.

5. Após a etapa 4 finalizada, tem-se como resultado a lista desejada de pontos_- da_envoltóriacom seus pontos organizados em uma sequência anti-horária.

Um exemplo do resultado obtido pode ser visto na Figura 19 a seguir:

Figura 19 – Resultado obtido com a sequência de pontos da envoltória complexa.

(a) Resultado da detec- ção de contornos. (b) Sequência de pon- tos da envoltória convexa. (c) Resultado final da envoltória convexa.

Fonte: Autoria Própria.

Documentos relacionados