Você está na página 1de 98

UNIVERSIDADE REGIONAL DO NOROESTE DO ESTADO DO RIO GRANDE DO

SUL
DEPARTAMENTO DE CIÊNCIAS EXATAS E ENGENHARIAS
CURSO DE ENGENHARIA ELÉTRICA

MARCO AURÉLIO FURMANN

DETECÇÃO DE ULTRAPASSAGENS VEICULARES IRREGULARES ATRAVÉS


DE ANÁLISE DE IMAGENS

Santa Rosa
2019
MARCO AURÉLIO FURMANN

DETECÇÃO DE ULTRAPASSAGENS VEICULARES IRREGULARES ATRAVÉS


DA ANÁLISE DE IMAGENS

Trabalho de Conclusão de Curso de Engenharia


Elétrica, apresentado ao colegiado da
Universidade Regional do Noroeste do Estado
do Rio Grande do Sul – UNIJUÍ, como requisito
parcial para obtenção do título de Engenheiro
Eletricista.

Orientador: Prof. Me Mauro Fonseca Rodrigues

Santa Rosa
2019
MARCO AURÉLIO FURMANN

DETECÇÃO DE ULTRAPASSAGENS VEICULARES IRREGULARES ATRAVÉS


DA ANÁLISE DE IMAGENS

Este Trabalho de Conclusão de Curso foi julgado adequado para a obtenção


do título de BACHAREL EM ENGENHARIA ELÉTRICA e aprovado em sua forma final
pelo professor orientador e pelos membros da banca examinadora.

Santa Rosa, fevereiro de 2019.

Prof. Mauro Fonseca Rodrigues


Mestre pela Universidade Federal de Santa Maria – Orientador

BANCA EXAMINADORA
Profª. Taciana Paula Enderle
Mestre pela Universidade Federal de Santa Maria
AGRADECIMENTOS

Agradeço primeiramente a Deus, por ter me dado saúde e força para superar
os obstáculos dessa jornada.
À minha esposa Karine, com quem amo partilhar a vida, pelo carinho e apoio
incondicionais.
Aos meus familiares, em especial aos meus pais, Bronislau e Míria, pelo
incentivo e apoio, e pelo exemplo de vida.
Ao meu orientador, Prof. Mauro Fonseca Rodrigues, pelo suporte oferecido
na idealização desse trabalho, pelas suas correções e incentivos.
A todos os amigos, colegas e professores que convivi durante esses anos da
graduação, pela amizade e companheirismo, e pelos conhecimentos compartilhados.
RESUMO

Furmann, Marco Aurélio. Detecção de ultrapassagens veiculares irregulares


através de análise de imagens. 2019. Trabalho de Conclusão de Curso. Curso de
Engenharia Elétrica, Universidade Regional do Noroeste do Estado do Rio Grande do
Sul – Unijuí, Santa Rosa.RS, 2019.
Acidentes de trânsito compõem atualmente um problema de saúde global.
Entre as mais diversas ocorrências, as colisões frontais ocorridas em pistas simples,
são as responsáveis pelo maior número de mortes nas estradas brasileiras. Segundo
levantamentos do Instituto de Pesquisa Econômica Aplicada (IPEA) no Brasil, essas
colisões são causadas principalmente devido a manobras de ultrapassagem ilegais.
O grande problema situa-se no fato de que não existem equipamentos eletrônicos
consolidados destinados a fiscalizar esse tipo de infração, cabendo somente a um
número insuficiente de agentes de campo. Nesse sentido, o presente trabalho visa
desenvolver uma ferramenta de detecção automática de ultrapassagens veiculares
irregulares, através da aplicação de técnicas de processamento e análise de imagens
de tráfego. Para tanto, desenvolveu-se um algoritmo em plataforma MATLAB, o qual
contempla basicamente processos matemáticos de manipulação e alteração de pixels,
dados principalmente por segmentação e operações de morfologia matemática, de
forma a detectar veículos e o tipo de faixa de uma rodovia. Ao final, é possível
determinar se no trecho analisado a ultrapassagem é permitida ou não, e com isso
também constatar se ocorre ou não uma ultrapassagem irregular.

Palavras-chave: Processamento de imagens digitais com MATLAB. Morfologia


matemática. Segmentação e análise de imagens de trânsito. Visão computacional.
ABSTRACT

Furmann, Marco Aurélio. Detection of irregular vehicular overtaking through


image analysis. 2019. Course Completion Work. Course of Electrical Engineering,
Regional University of the Northwest of the State of Rio Grande do Sul – Unijuí, Santa
Rosa, 2019.
Traffic accidents currently comprise a global health problem. Among the most
diverse occurrences, frontal collisions occurring on simple highways are responsible
for the highest number of deaths on Brazilian roads. According to surveys by the
Institute for Applied Economic Research (IPEA) in Brazil, these collisions are mainly
caused by illegal overtaking maneuvers. The main problem is the fact that there are
no consolidated electronic equipment to supervise this type of infraction, and only an
insufficient number of field agents. In this sense, the present work aims to develop an
automatic detection tool for irregular vehicular overtakings, through the application of
traffic image processing and analysis techniques. For that, an algorithm was developed
in MATLAB platform, which basically contemplates mathematical processes of
manipulation and alteration of pixels, given mainly by segmentation and operations of
morphology, in order to detect the type of track of a highway. At the end, it is possible
to determine whether or not the overtaking is allowed in the analyzed section, and also
to verify whether or not an irregular overtaking occurs.

Keywords: Digital imagem processing with MATLAB. Mathematical Morphology.


Segmentation and analysis of traffic images. Computer vision.
LISTA DE FIGURAS

Figura 1 - Ultrapassagem irregular em rodovia simples de mão dupla. .................... 16


Figura 2 - (a) Um único sensor de aquisição de imagens. (b) Matriz de sensores. ... 17
Figura 3 - Processo de aquisição de uma imagem digital. ........................................ 18
Figura 4 – Influência da variação dos parâmetros N, M e G na qualidade uma
imagem monocromática. (a) 200 x 200 pixels/256 níveis (b) 100 x 100 pixels/ 256
níveis. (c) 25 x 25 pixels/ 256 níveis. (d) 200 x 200 pixels / 2 níveis. ........................ 20
Figura 5 - Sistema de coordenadas de uma imagem digital. .................................... 21
Figura 6 - Níveis de cinza (0 – 255). ......................................................................... 21
Figura 7 – Imagem digitalizada com resolução de 100 pixels e 256 níveis de cinza. 22
Figura 8 - Decomposição dos três canais de cores de uma imagem RGB. .............. 23
Figura 9 - Conceito de vizinhança de pixels. (a) Conectividade +4. (b) Conectividade
x4. (c) Conectividade 8. ............................................................................................. 24
Figura 10 - Processamento Digital de Imagens......................................................... 25
Figura 11 - Níveis de processamento de imagens. ................................................... 25
Figura 12 - Exemplo de histograma para uma imagem de 128 x 128 pixels, com 8
níveis de cinza. (a) Tabela de dados; (b) Histograma. .............................................. 27
Figura 13 - Imagens monocromáticas e seus respectivos histogramas. (a) Imagem
escura; (b) Imagem clara. ......................................................................................... 28
Figura 14 - Aplicação da técnica de expansão de histograma. (a) Imagem original e
respectivo histograma; (b) Imagem com contraste aprimorado e novo histograma. . 29
Figura 15 - Aplicação da técnica de compressão de histograma. (a) Imagem original
com respectivo histograma; (b) Imagem com contraste diminuído e novo histograma.
.................................................................................................................................. 30
Figura 16 - Operação de convolução com máscaras. (a) Subárea de uma imagem;
(b) Máscara 3 x 3. ..................................................................................................... 31
Figura 17 - Máscara 3 x 3 genérica. .......................................................................... 32
Figura 18 - Máscara para a detecção de pontos isolados. ........................................ 33
Figura 19 – (a) Radiografia de uma lâmina de turbina de um motor de jato. (b)
Imagem obtida após aplicação da técnica de detecção de pontos (ponto ampliado).
.................................................................................................................................. 34
Figura 20 - Máscara para detecção de linhas. (a) Horizontal (b) Vertical (c) +45º (d) -
45º. ............................................................................................................................ 34
Figura 21 - Modelos de borda. (a) Ideal (b) Real....................................................... 35
Figura 22 - Borda real e representação de 1ª e 2ª derivadas. ................................... 35
Figura 23 - Máscaras detectoras de borda. (a) Roberts; (b) Prewitt. ......................... 36
Figura 24 - (a) Imagem original monocromática; (b) Realce de bordas utilizando o
operador de Prewitt horizontal e vertical. .................................................................. 37
Figura 25 - (a) Máscara utilizada no cômputo do Laplaciano; (b) Imagem original
monocromática; (c) Imagem após filtragem por (a). .................................................. 38
Figura 26 - Histograma de níveis de cinza de uma imagem. .................................... 38
Figura 27 - Exemplo de imagem binarizada. ............................................................. 39
Figura 28 - (a) Imagem limiarizada; (b) Resultado da abertura sobre (a); (c)
Resultado do fechamento sobre (b). ......................................................................... 41
Figura 29 - Sistema de coordenadas para cálculo do Momento de um objeto. ......... 43
Figura 30 - Sequência do PADI. ................................................................................ 45
Figura 31 - Fluxograma resumido do algoritmo de detecção de ultrapassagens. ..... 48
Figura 32 - Etapas de PADI do algoritmo implementado. ......................................... 49
Figura 33 - Imagem base para elaboração do algoritmo de detecção. ..................... 49
Figura 34 – Situações simuladas. (a) Presença de faixa tracejada/seccionada
amarela; (b) Condição de ultrapassagem irregular; (c) Condição normal de tráfego.
.................................................................................................................................. 50
Figura 35 – Imagem adquirida da pista de mão dupla. ............................................. 51
Figura 36 - Imagem da pista de mão dupla convertida para escala de cinza e
respectivo histograma. .............................................................................................. 52
Figura 37 - Imagem com o brilho ajustado e respectivo histograma. ........................ 53
Figura 38 - Imagem com contraste ajustado e respectivo histograma. ..................... 54
Figura 39 - Região de interesse da pista e respectivo histograma. ........................... 55
Figura 40 - ROI da pista binarizada com Método de Otsu. ....................................... 56
Figura 41 - ROI da pista com elementos desconexos (tachões) eliminados. ............ 57
Figura 42 - Exemplos de elemento de estruturação do tipo 'line'. (a) LEN=9 e
DEG=0. (b) LEN=3 e DEG=45; ................................................................................. 57
Figura 43 - Elemento de estruturação criado para suavização das faixas. ............... 58
Figura 44 - Sinalização horizontal da pista livre suavizada com erosão binária. ....... 58
Figura 45 - Rotulação e total de objetos encontrados na ROI da pista. .................... 60
Figura 46 - Indicação de presença de linha contínua na imagem adquirida. ............ 60
Figura 47 - Imagem adquirida da pista de mão dupla. .............................................. 61
Figura 48 - Imagem da pista de mão dupla e respectivo histograma. ....................... 61
Figura 49 - Imagem da pista de mão dupla com brilho ajustado. .............................. 62
Figura 50 - Imagem da pista de mão dupla com contraste ajustado. ........................ 62
Figura 51 - Seleção da região de interesse da pista de mão dupla e respectivo
histograma................................................................................................................. 63
Figura 52 - ROI da pista de mão dupla binarizada com Método de Otsu. ................. 63
Figura 53 - ROI da pista de mão dupla com objetos desconexos eliminados. .......... 64
Figura 54 - Sinalização da pista suavizada com erosão binária. ............................... 64
Figura 55 - Rotulação e número de objetos encontrados na ROI da pista de mão
dupla. ........................................................................................................................ 65
Figura 56 - Indicação de linha tracejada - ultrapassagem permitida. ........................ 65
Figura 57 - Nova imagem adquirida da pista de mão dupla. ..................................... 67
Figura 58 - Resultados obtidos após tarefas iniciais sobre Figura 57. (a) Conversão
para escala de cinza; (b) Ajuste de brilho sobre (a); (c) Ajuste de contraste sobre (b).
.................................................................................................................................. 67
Figura 59 - Resultados obtidos após processamento sobre Figura 58-c. (a) Seleção
da ROI; (b) Binarização sobre (a); (c) Eliminação de objetos desconexos sobre (b);
(d) Erosão binária sobre (c). ...................................................................................... 68
Figura 60 - Elementos de estruturação utilizados na dilatação binária. .................... 68
Figura 61 - ROI da nova imagem após processo de dilatação binária sobre Figura
59(d). ......................................................................................................................... 68
Figura 62 - Indicação de condição normal (sem ultrapassagens detectadas). .......... 69
Figura 63 - Nova imagem da pista com situação de descontinuidade de faixa. ........ 70
Figura 64 - Conversão para escala de cinza. ............................................................ 70
Figura 65 - (a) Ajuste de brilho sobre Fig.64; (b) Ajuste de contraste sobre (a). ....... 70
Figura 66 - (a) Seleção da ROI sobre Fig. 65-b; (b) Binarização utilizando Método de
Otsu sobre (a); (c) Eliminação de objetos desconexos sobre (b); (d) Erosão binária
sobre (c). ................................................................................................................... 71
Figura 67 - Resultado da dilatação binaria realizado sobre Figura 66-d. .................. 71
Figura 68 - Retorno dos pontos onde a descontinuidade foi detectada. ................... 72
Figura 69 - ROI do objeto que causou a descontinuidade. ....................................... 72
Figura 70 - ROI do objeto com contraste aprimorado e respectivo histograma......... 73
Figura 71 - ROI do objeto binarizada. ....................................................................... 73
Figura 72 - Elementos de estruturação utilizados na dilatação do objeto encontrado.
.................................................................................................................................. 74
Figura 73 - (a) ROI do objeto com elementos desconexos eliminados; (b) Dilatação
binária sobre (a). ....................................................................................................... 74
Figura 74 – (a) Elemento de estruturação do tipo 'disk' utilizado no fechamento
binário; (b) Elemento de estruturação do tipo ‘diamond’ utilizado na erosão binária. 75
Figura 75 – (a) Resultado de fechamento binário sobre Figura (73-b); (b) Erosão
binária sobre (a). ....................................................................................................... 75
Figura 76 - Apresentação da área e demais atributos do objeto encontrado. ........... 76
Figura 77 - Condição de ultrapassagem irregular detectada. .................................... 76
Figura 78 – Parte I do Fluxograma completo. ........................................................... 88
Figura 79 - Parte II do Fluxograma completo. ........................................................... 89
Figura 80 - Parte III do Fluxograma completo. .......................................................... 90
LISTA DE ABREVIATURAS E SIGLAS

ADI Análise Digital de Imagens


A/D Analógica-Digital
Bitmap Mapa de bits
CCD Charge Coupled Device
CID Charge Integrated Device
CNT Confederação Nacional do Transporte
CONTRAN Conselho Nacional de Trânsito
IPEA Instituto de Pesquisa Econômica Aplicada
JPG Joint Photographic Experts Group
MATLAB Matrix Laboratory
ONU Organização das Nações Unidas
OMS Organização Mundial da Saúde
PADI Processamento e Análise Digital de Imagens
PDI Processamento Digital de Imagens
PRF Polícia Rodoviária Federal
ROI Region of Interest
SENAT Serviço Nacional de Aprendizagem do Transporte
SEST Serviço Social do Transporte
TIFF Tagged Image File Format
SUMÁRIO

1 INTRODUÇÃO ....................................................................................... 11
1.1 OBJETIVOS ........................................................................................... 12
1.1.1 OBJETIVO GERAL ................................................................................ 12
1.1.2 OBJETIVOS ESPECÍFICOS .................................................................. 13
1.2 ESTRUTURA DO TRABALHO ............................................................... 13
2 REVISÃO BIBLIOGRÁFICA .................................................................. 15
2.1 ANÁLISE AUTOMÁTICA DE VEÍCULOS EM IMAGENS ....................... 15
2.2 IMAGEM ................................................................................................. 16
2.2.1 Aquisição e digitalização de imagens ................................................ 17
2.2.2 Representação de imagens ................................................................. 18
2.2.3 Vizinhança e Conectividade de pixels ................................................ 23
2.3 PROCESSAMENTO E ANÁLISE DIGITAL DE IMAGENS ..................... 24
2.3.1 Níveis de Processamento .................................................................... 25
2.4 TÉCNICAS DE TRANSFORMAÇÃO E ANÁLISE DE IMAGENS........... 26
2.4.1 Histograma de imagens ....................................................................... 27
2.4.2 Operações de convolução com máscaras ......................................... 30
2.4.3 Segmentação ........................................................................................ 32
2.4.4 Operações de Morfologia Matemática ................................................ 40
2.4.5 Reconhecimento de objetos por características ............................... 42
2.5 MATLAB ................................................................................................. 44
3 METODOLOGIA .................................................................................... 45
3.1 MÉTODO DE ABORDAGEM ................................................................. 45
3.2 TÉCNICAS DE PESQUISA .................................................................... 45
4 IMPLEMENTAÇÃO E ANÁLISE DE FUNCIONAMENTO DO
ALGORITMO ......................................................................................... 49
4.1 DETECÇÃO DO TIPO DE SINALIZAÇÃO HORIZONTAL ..................... 50
4.1.1 Análise considerando a presença de faixa dupla continua .............. 50
4.1.2 Análise considerando a presença de faixa tracejada/seccionada ... 61
4.2 DETECÇÃO DA DESCONTINUIDADE DE FAIXA ................................. 66
4.2.1 Análise considerando condição de normalidade (sem
descontinuidade).................................................................................. 66
4.2.2 Análise considerando presença de descontinuidade de faixa ......... 70
4.3 ANÁLISE DOS RESULTADOS .............................................................. 77
5 CONSIDERAÇÕES FINAIS ................................................................... 79
5.1 TRABALHOS FUTUROS ....................................................................... 80
REFERÊNCIAS ......................................................................................................... 82
APÊNDICE A – FLUXOGRAMA COMPLETO DO ALGORITMO ............................ 88
APÊNDICE B – CÓDIGO FONTE............................................................................. 91
11

1 INTRODUÇÃO

Todos os anos milhões de pessoas morrem vítimas de acidentes de trânsito


ao redor do mundo. Segundo a Organização Mundial da Saúde (OMS), em 2013 foram
cerca de 1,2 milhões de pessoas que perderam suas vidas. Frente a isso, acidentes
desse gênero passaram a compor um problema de saúde global segundo a
Organização das Nações Unidas (ONU) (OMS, 2015).
No Brasil os números vêm aumentando desde 2009, colocando o país em
primeiro lugar na América do Sul em número de óbitos no trânsito por habitante com
cerca de 41.059 mortes em 2013 (OMS, 2015). Conforme Relatório de Pesquisa
apresentado pelo Instituto de Pesquisa Econômica Aplicada (IPEA) em 2014
ocorreram 169.163 acidentes em estradas federais fiscalizadas pela Polícia
Rodoviária Federal (PRF), totalizando 8.227 mortes e cerca de 100 mil feridos
(BRASIL, 2015).
Ainda, segundo o relatório, entre as mais diversas ocorrências as colisões
frontais ocorridas em pistas simples, foram as que caracterizaram o maior número de
mortes, aproximadamente 92% (BRASIL, 2015). Nesse contexto, considerando a
presença predominante de rodovias simples de mão dupla na malha viária brasileira
(CNT; SEST; SENAT, 2017), ultrapassagens irregulares são um dos principais
motivos que originam esse tipo de acidente.
Atualmente a fiscalização de trânsito no Brasil se concentra intensamente no
“excesso” de velocidade, o que é evidenciado pelo crescente aumento de radares e
dispositivos semelhantes nas rodovias. No entanto, esse aumento não tem mostrado
resultado prático ao analisar as estatísticas de mortes no trânsito brasileiro nos últimos
anos. Segundo Contesini (2015), os esforços deveriam se concentrar no sentido de
aumentar a fiscalização principalmente de ultrapassagens indevidas, maior causadora
de acidentes fatais, porém o maior problema é a falta de recursos e o número
insuficiente de agentes.
A fiscalização das vias é realizada geralmente por agentes de trânsito
posicionados em campo, muitas vezes utilizando de equipamentos eletrônicos como
suporte. Mais recentemente, a partir de 2013, a Resolução nº 471 do Conselho
Nacional de Trânsito (CONTRAN), autorizou o monitoramento em centrais de vídeo,
dessa forma a fiscalização pode também ser realizada de forma remota (BRASIL,
2013).
12

Quanto à fiscalização eletrônica de trânsito, essa se divide em duas


aplicações (MING, 2006):
• Aplicações metrológicas: medição do valor de uma grandeza física
(velocidade) baseando-se na tecnologia de laços indutivos, a exemplo do radar fixo e
da barreira eletrônica ou por meio de ondas eletromagnéticas (radar estático).
• Aplicações não metrológicas: não envolvem medição, apenas
constatando ou identificando ocorrências. Por exemplo a fiscalização de invasão de
semáforo vermelho ou de faixa exclusiva de ônibus. Nesse caso “a captura e o
processamento de imagens constitui uma etapa importante no processo de
fiscalização.” (MING, 2006).
Segundo Gupte e Masoud (2002 apud SANTOS, 2014) sistemas de
fiscalização baseados em sensores com laços indutivos, laser e radar são tecnologias
confiáveis e precisas já consolidadas, porém, sistemas coletores de dados baseados
em imagem são mais versáteis, pois permitem, após aquisição, detectar várias
informações ao mesmo tempo, além de possuírem maior alcance.
Tendo em vista o potencial do processamento de imagens em tarefas de
monitoramento de tráfego de veículos e a diante da necessidade de uma maior
fiscalização frente ao grave problema de acidentes no trânsito da sociedade atual, o
presente trabalho visa desenvolver um sistema automático de detecção de
ultrapassagens irregulares, através do processamento e análise de imagens de
câmeras de monitoramento, com a finalidade de impulsionar o desenvolvimento desse
tipo de tecnologia contribuindo para um trânsito mais seguro e com menos vítimas

1.1 OBJETIVOS

1.1.1 OBJETIVO GERAL

O presente trabalho tem como proposta desenvolver um sistema de detecção


automática de infração de trânsito do gênero ultrapassagem, mais especificamente,
elaborar um algoritmo que seja capaz de determinar quando um veículo realiza uma
ultrapassagem na presença de linha dupla contínua ou simples contínua amarela.
13

1.1.2 OBJETIVOS ESPECÍFICOS

• Revisar a bibliografia em Processamento e Análise de imagens;


• Compreender conceitos de formação e representação de imagens
digitais, tais como aquisição, resolução, topologia de pixels, entre outros.
• Retomar conceitos de programação no software Matrix Laboratory
(MATLAB), explorando bibliotecas e comandos relacionados a visão computacional;
• Propor um método de detectar a ultrapassagem irregular em linha dupla
contínua ou simples contínua amarela;
• Propor um método de detectar veículos a partir de uma imagem digital;
• Realizar testes como o algoritmo implementado de forma a analisar o
desempenho da aplicação desenvolvida.

1.2 ESTRUTURA DO TRABALHO

O presente trabalho está subdividido em 5 capítulos, incluindo a Introdução,


conforme dados a seguir:
No Capítulo 1 tem-se a introdução do assunto. Destaca-se nessa etapa a
justifica do tema a ser desenvolvido, assim como os objetivos gerais e específicos do
estudo realizado.
No Capítulo 2 encontra-se a revisão da literatura. Nessa etapa são
apresentados os conceitos de imagem, formas de aquisição, representação, e
principais tipos utilizados. Também se têm evidenciado conceitos de processamento
e análise de imagens, assim como as principais técnicas de transformação utilizadas
nessa área.
No Capítulo 3 o método de abordagem e a técnica de pesquisa utilizada são
apresentados. Trata-se de uma etapa que visa evidenciar a conexão entre os
conceitos teóricos com o desenvolvimento do algoritmo, tratado no capítulo posterior.
No Capítulo 4 tem-se a implementação do algoritmo de detecção de
ultrapassagens. De maneira conjunta, é apresentada também a análise de
funcionamento da ferramenta, através da descrição analítica das tarefas executadas.
Os resultados obtidos também são avaliados.
14

No Capitulo 5, tem-se as considerações finais, na qual discute-se a


funcionalidade da aplicação e a importância do presente estudo. Por fim, são
sugeridos trabalhos futuros com o algoritmo.
15

2 REVISÃO BIBLIOGRÁFICA

2.1 ANÁLISE AUTOMÁTICA DE VEÍCULOS EM IMAGENS

Atualmente, ferramentas eficientes para observação e gerenciamento de


tráfego de veículos são elaboradas a partir de sistemas baseados em imagem. Esses
sistemas trouxeram grandes benefícios, de forma que ao adquirir e processar
informações sobre o tráfego de veículos pode-se por exemplo: evitar
congestionamentos, prevenir acidentes e detectar infrações
O processo de rastreamento de objetos tornou-se uma das tarefas mais
importantes na área de visão computacional, dado que a base de qualquer aplicação
envolvendo monitoramento de veículos advém da localização espacial do mesmo.
Aliado a isso, tem-se difundido atualmente o estudo de métodos de detecção de
ultrapassagem, principalmente a partir de câmeras embarcadas em veículos, como
meio de alerta para o motorista em caso de ultrapassagem sobre seu veículo
(SANTOS, 2014).
Conforme a Lei 9.503 (BRASIL, 1997, Anexo I) o termo ultrapassagem é
definido como “movimento de passar à frente de outro veículo que se desloca no
mesmo sentido, em menor velocidade e na mesma faixa de tráfego, necessitando sair
e retornar à faixa de origem.”
“A ultrapassagem de outro veículo em movimento deverá ser feita pela
esquerda, obedecida a sinalização regulamentar [..].” (BRASIL, Lei 9.503, 1997,
Capítulo III, Art. 29).
Ainda, segundo o artigo 203 da Lei 9.503 (BRASIL, 1997) “Ultrapassar pela
contramão outro veículo (Figura 1): [..] V – onde houver marcação viária longitudinal
de divisão de fluxos opostos do tipo linha dupla contínua ou simples contínua amarela.
Infração – gravíssima. Penalidade - multa (cinco vezes).”
16

Figura 1 - Ultrapassagem irregular em rodovia simples de mão dupla.

Fonte: Contesini, 2014.

Montanari (2015) argumenta que, em uma aplicação de rastreamento de


objetos a detecção de um objeto em movimento em um vídeo é uma etapa essencial.
Segundo ele, “O objetivo da detecção de objetos em movimento é localizar objetos
em primeiro plano para extrair informações úteis ao sistema como trajetória,
orientação e velocidade, etc.” (MONTANARI, 2015, p. 23). Sendo assim, essa técnica
resume-se basicamente a segmentar, a partir de cenas de vídeo (quadros), os objetos
em análise.

2.2 IMAGEM

De forma geral, segundo Niku (2013), uma imagem é a representação de uma


cena real, seja em preto e branco, escala de cinza, colorida, seja na forma impressa
ou digital. Sendo assim, devido essa natureza da imagem, uma representação
completa de uma cena implica em uma imagem tridimensional, ou seja, com
informações de largura, altura e profundidade.
No entanto as imagens podem também ser representadas omitindo
informações de profundidade, o que caracteriza as imagens bidimensionais, as quais
compõem a maioria das imagens que tratamos normalmente obtidas por câmeras
(NIKU, 2013). Embora não possuam características de profundidade, essas imagens
são extremamente úteis para diversas aplicações, como: extração de características,
inspeção, navegação, incluindo a aplicação desenvolvida pelo presente trabalho.
17

2.2.1 Aquisição e digitalização de imagens

No processo de aquisição de imagens existem basicamente dois tipos de


câmeras utilizadas: a analógica e a digital. As câmeras analógicas, muito utilizadas
tempos passados como câmeras padrão em estações de televisão, não são mais
comuns, embora ainda existam em algumas aplicações (NIKU, 2013).
Conforme Niku (2013), câmeras analógicas basicamente transformam uma
imagem em um sinal contínuo de tensão ou corrente. Já as câmeras digitais, padrão
atual, são baseadas na tecnologia de estado sólido, onde uma imagem é transformada
em uma tensão amostrada no tempo, de forma discreta. No entanto, na área de
Processamento e Análise Digital de Imagens (PADI), independentemente de a
imagem ser obtida de forma analógica ou digital, a mesma é eventualmente
digitalizada.
Segundo Gonzalez; Woods (2010), o processo de aquisição de uma imagem
digital é realizado basicamente por sensores individuais (Figura 2(a)) dispostos em
forma de uma matriz bidimensional, conforme representado na Figura 2(b). Sensores
típicos, amplamente utilizados em câmera digitais, são o CCD (Charge Coupled
Device – Dispositivo de Cargas Acopladas), e o CID (Charge Integrated Device –
Dispositivo de Cargas Integradas).

Figura 2 - (a) Um único sensor de aquisição de imagens. (b) Matriz de sensores.

Fonte: Modificado de GONZALEZ; WOODS, 2010.

Primeiramente o sistema de aquisição (Figura 3(a)) coleta a energia de


entrada - energia refletida de um elemento de uma cena, através de uma lente ótica e
projeta em um plano imagem (Figura 3(b)) – plano focal da lente. O arranjo de
sensores, que coincide com o plano focal, produz uma saída proporcional à integral
18

da luz recebida. Essa saída é então interpretada por circuitos digitais e analógicos e
posteriormente digitalizada por um outro componente no sistema de aquisição de
imagens. Finalmente, na saída do sistema, tem-se uma imagem digital (Figura 3(c)).

Figura 3 - Processo de aquisição de uma imagem digital.

Fonte: Modificado de GONZALEZ; WOODS, 2010.

Quanto ao processo de digitalização, eletronicamente este consiste em uma


conversão analógica-digital (A/D), onde o número de amostras do sinal contínuo por
unidade de tempo define a taxa de amostragem, responsável pela discretização
espacial da imagem. O número de bits do conversor A/D define o número de tons de
cinza de uma imagem monocromática, sendo assim responsável pela discretização
em amplitude da imagem, em uma operação chamada quantização (MARQUES
FILHO; VIEIRA NETO, 1999).
Do ponto de vista computacional, basicamente a intensidade da luz em cada
pixel é convertida em uma coleção de 0 e 1 (forma binária), a qual é sequencialmente
armazenada em uma memória, em um arquivo, geralmente no formato TIFF, JPG,
Bitmap. Sendo assim, tendo constituído o arquivo da imagem em formato digital, pode-
se acessar o mesmo, para tarefas simples de visualização, ou em rotinas de
processamento de imagens, de forma a manipular os dados, salvando o resultado em
um novo arquivo (NIKU, 2013).

2.2.2 Representação de imagens

Matematicamente, uma imagem digital pode ser definida como uma função
bidimensional f (x, y). Nessa função x e y representam coordenadas espaciais, e a
19

amplitude de f em qualquer par de coordenadas (x, y) representa a intensidade ou


nível de cinza (no caso de uma imagem monocromática) da imagem nesse ponto.
Como trata-se de uma imagem digital, x, y, e os valores de intensidade de f são
quantidades finitas e discretas (GONZALEZ; WOODS, 2010).
Outra forma de representação muito utilizada no processamento de imagens,
consiste em considerar a imagem como uma matriz, onde, segundo Peres (2010, p.
5):
[...] os índices de linhas e colunas determinam um ponto na imagem e o
correspondente valor do elemento da matriz identifica o nível de cinza
naquele ponto. Os elementos dessa matriz digital são chamados de
elementos da imagem, elementos da figura, pixels ou pels, estes dois últimos,
abreviações de picture elements (elementos de figura). Quanto mais pixels
uma imagem tiver melhor é a sua resolução e qualidade [..]

Sendo assim, na forma matemática, a matriz f (x,y) de N x M pixels, onde N


representa a quantidade de linhas, e M representa a quantidade de colunas, é definida
pela Equação 1 (GONZALEZ; WOODS, 2000, p. 22) :

𝑓(0,0) 𝑓(0,1) … 𝑓(0, 𝑀 − 1)


𝑓(1,0) 𝑓(1,1) … 𝑓(1, 𝑀 − 1)
𝑓(𝑥, 𝑦) = [ ] (1)
⋮ ⋮ ⋮
𝑓(𝑁 − 1,0) 𝑓(𝑁 − 1,1) … 𝑓(𝑁 − 1, 𝑀 − 1)

Os valores de N, M e o número de tonalidades de cinza (G) permitido para


cada pixel, são potências inteiras de dois, definidas no processo de digitalização
(seção 2.2.1), e determinam a resolução de uma imagem, descrita na literatura como
o grau de detalhes discerníveis. Suas respectivas funções matemáticas são definidas
pelas equações 2, 3 e 4. O número de bits, b, para armazenar uma imagem é definido
pelas Equações 5 e 6 (GONZALEZ; WOODS, 2000, p. 22).

𝑁 = 2𝑛 (2)
𝑀 = 2𝑘 (3)
𝐺 = 2𝑚 (4)
𝑏 = 𝑁×𝑀×𝑚 (5)
𝑏 = 𝑁 2 × 𝑚, 𝑠𝑒 𝑀 = 𝑁 (6)

Seja uma imagem de 128 (N) x 128 pixels (M) com 64 (G) níveis de cinza, por
exemplo, substituindo na Equação (4) tem-se que:
20

𝐺 = 2𝑚 → 64 = 2𝑚 → 26 = 2𝑚 → 𝒎 = 𝟔

E como 𝑀 = 𝑁, substituindo N e m na Equação 6, encontra-se a quantidade


de bits necessários para o armazenamento:

𝑏 = 1282 × 6 = 98.304 𝑏𝑖𝑡𝑠

Dessa forma, e observando a Equação 5, faz-se notar que os parâmetros N,


M e G, influenciam diretamente na quantidade de memória necessária para o
armazenamento e, por conseguinte, no processamento. Nesse sentido, quanto
maiores forem esses parâmetros, melhor será a resolução da imagem, por outro lado,
será necessária maior quantidade de memória e processamento para a manipulação
dos dados (GONZALEZ; WOODS, 2000).
Na Figura 6, pode-se notar que a variação desses parâmetros implica
diretamente no nível de detalhes visíveis. Observa-se que a imagem (Figura 4(a)), a
qual apresenta uma maior resolução (maior número de pixels), apresenta também
mais detalhes em comparação com a mesma imagem, representada na Figura 4(c)
com menor resolução (GONZALEZ; WOODS, 2000; GOMES; QUEIROZ, 2001).

Figura 4 – Influência da variação dos parâmetros N, M e G na qualidade uma imagem


monocromática. (a) 200 x 200 pixels/256 níveis (b) 100 x 100 pixels/ 256 níveis. (c) 25 x 25 pixels/
256 níveis. (d) 200 x 200 pixels / 2 níveis.

Fonte: GOMES; QUEIROZ, 2001.

• Topologia de pixels e sistema de coordenadas


Segundo Albuquerque et al. (2004), os pixels em uma imagem são
organizados de forma a obter uma simetria quadrada, o que facilita a implementação
eletrônica em sistemas de aquisição assim como dos sistemas de visualização de
imagens. Este sistema de distribuição origina o conceito de conectividade de pixels, o
qual será discutido posteriormente (seção 2.2.3).
21

Quanto a localização da origem do sistema de coordenadas, esse localiza-se


no canto superior esquerdo, com eixo y invertido em relação ao padrão comum
utilizado na matemática, conforme pode-se visualizar na Figura 5 (SCURI, 1999).

Figura 5 - Sistema de coordenadas de uma imagem digital.

Fonte: Modificado de REIS, 2014.

• Imagem monocromática
Em uma imagem monocromática a intensidade de f nas coordenadas (x, y) é
chamada de Nível de Cinza (L) da imagem naquele ponto. O tom de cinza
compreenderá valores, conforme determinado pela Equação 7 (MARQUES FILHO;
VIEIRA NETO, 1999, p. 20):
𝐿𝑚𝑖𝑛 ≤ 𝐿 ≤ 𝐿𝑚𝑎𝑥 (7)

onde os valores de 𝐿𝑚𝑖𝑛 e 𝐿𝑚𝑎𝑥 são positivos e finitos, e definem a escala de cinza da
imagem.
Usualmente o intervalo é deslocado numericamente para o intervalo dos
inteiros [0, W], sendo L=0, denominado como pixel preto, L=W-1 denominado como
pixel branco (MARQUES FILHO; VIEIRA NETO, 1999). Além disso L=256, o que
resulta em uma variação possível de 256 tonalidades. Dessa forma, e conforme
ilustrado na Figura 6, tons mais escuros se aproximam de 0 (preto), extrema esquerda,
e tons mais claros de aproximam de 255 (branco), extrema direita (MATIAS, 2007).

Figura 6 - Níveis de cinza (0 – 255).

Fonte: MATIAS, 2007.


22

Na Figura 7, pode-se observar uma imagem digitalizada com uma resolução


de 100 pixels (10 linhas x 10 colunas) e sua respectiva representação em formato
matricial. Os valores da função f (x,y) representam a intensidade de luz de cada pixel,
variando de 0 (preto) a 255 (branco), porém no caso da imagem apresentada estão
descritos somente como forma de exemplificação, visto que não compatibilizam com
as tonalidades apresentadas visualmente (PAZOS, 2002).

Figura 7 – Imagem digitalizada com resolução de 100 pixels e 256 níveis de cinza.

Fonte: PAZOS, 2002.

• Imagem colorida
Imagens coloridas são formadas pela adição de cores primárias (vermelho,
verde e azul), compondo o padrão conhecido como RGB (Red, Green, Blue). Essas
imagens necessitam de uma função 𝑓(𝑥, 𝑦) para cada banda de cor. Sendo assim são
determinadas por: (SALES, 2014 apud QUEIROZ; GOMES, 2006):

𝑓(𝑥, 𝑦) = (𝑓𝑅 (𝑥, 𝑦), 𝑓𝐺 (𝑥, 𝑦), 𝑓𝐵 (𝑥, 𝑦)) (8)

onde as funções 𝑓𝑅 (𝑥, 𝑦), 𝑓𝐺 (𝑥, 𝑦), 𝑓𝐵 (𝑥, 𝑦), representam, respectivamente, os níveis de
intensidade luminosa das cores, vermelha, verde e azul da imagem no ponto (x,y).
Para cada canal, conforme pode ser visualizado na Figura 8, o valor de
intensidade é convertido em uma escala de cinza, a qual varia de 0 (preto) a 255
(branco). Devido a isso, uma imagem colorida pode ser descrita também como a
composição de três imagens monocromáticas (SALES, 2014).
23

Figura 8 - Decomposição dos três canais de cores de uma imagem RGB.

Fonte: Modificado de GATTASS, 2015.

2.2.3 Vizinhança e Conectividade de pixels

O conceito de conectividade em uma imagem define as relações entre pixels


vizinhos, determinando se eles estão “conectados” ou relacionados uns com os
outros. Com isso é possível determinar se eles possuem propriedades semelhantes,
como pertencer à mesma região ou objeto por exemplo, sendo, portanto, de grande
utilidade em tarefas de reconhecimento de objetos na área de processamento e
análise de imagens. (NIKU, 2013).
Seja um pixel p, de coordenadas (x, y), com 4 vizinhos horizontais e verticais,
cujas coordenadas sejam (x+1, y), (x-1, y), (x, y+1) e (x, y-1). Esses pixels definem a
chamada “4-vizinhança” ou “Conectividade +4” de p, designado 𝑁4 (𝑝) (Figura 9(a)).
A análise do pixel p em relação aos 4 pixels situados diagonalmente em 4
lados, cujas coordenadas são (x-1,y-1), (x-1,y+1),(x+1,y-1) e (x+1,y+1), constituem o
conjunto 𝑁𝑑 (𝑝), chamado “Conectividade x4” (Figura 9(b)).
Sendo assim, o relacionamento de um pixel p em relação a todos os 8 pixels
ao seu redor define a “8-vizinhança” ou “Conectividade 8” de p, conforme Figura 9 (c)
– Equação 9 (MARQUES FILHO; VIEIRA NETO, 1999; NIKU, 2013):

𝑁8 (𝑝) = 𝑁4 (𝑝) ∪ 𝑁𝑑 (𝑝) (9)


24

Figura 9 - Conceito de vizinhança de pixels. (a) Conectividade +4. (b) Conectividade x4. (c)
Conectividade 8.

Fonte: Modificado de MARQUES FILHO; VIEIRA NETO, 1999.

2.3 PROCESSAMENTO E ANÁLISE DIGITAL DE IMAGENS

Define-se por Processamento Digital de Imagens (PDI) o conjunto de técnicas


que utilizam operadores matemáticos para alterar pixels de imagens digitais. Essas
alterações visam melhorar a imagem, corrigindo defeitos de aquisição ou destacando
pontos e regiões de interesse. Sendo assim, o objetivo do PDI divide-se em dois
pontos: o primeiro relacionado à modificação de uma imagem com a finalidade de
facilitar sua visualização e o segundo relacionado à sua preparação para posterior
análise computadorizada, compondo o processo de Análise Digital de Imagens (ADI)
(GOMES, 2007).
A ADI é definida, segundo Niku (2013), como o conjunto de processos
posterior a captura e processamento de uma imagem, nos quais informações são
extraídas através de uma análise sobre seu conteúdo, possibilitando identificar objetos
ou fatos relacionados com os objetos da imagem.
Em contraponto, Gonzalez; Woods (2010), argumenta que não existe um
acordo em relação a delimitação das fronteiras em que o processamento de imagens
termina e a análise de imagens começa, ou vice-versa. Isto é justificável pelo fato de
que, por exemplo, uma determinada tarefa de processamento pode ser ajustada ou
parametrizada após um processo anterior de análise da imagem (GOMES, 2007).
No entanto, “[...] existe um ponto lógico de sobreposição entre o
processamento e a análise de imagens [...]” (GONZALEZ; WOODS, 2010, p. 1). Esse
ponto, relacionado a área de reconhecimento de regiões ou objetos em uma
determinada imagem, permite diferenciar esses dois conceitos. Sendo assim, pode-
se concluir que, o PDI descreve processos nos quais as entradas e saídas são
imagens (Figura 10). Já a ADI envolve processos cuja entrada é uma imagem e a
saída é uma “descrição” dessa imagem (GONZALEZ; WOODS, 2010; SILVA, 1996).
25

Figura 10 - Processamento Digital de Imagens.

Fonte: Modificado de REIS, 2014.

No contexto da ADI é importante salientar que, embora o ser humano possua


grandes capacidades no reconhecimento de objetos, a ADI torna-se superior no
momento que proporciona medidas mais exatas, rápidas e precisas, além de
possibilitar medições que seriam impossíveis de serem executadas e/ou determinadas
manualmente (GOMES, 2007).

2.3.1 Níveis de Processamento

Quanto aos níveis de processamento de imagem, Gonzalez; Woods (2000)


propôs uma divisão do espectro de análise de imagens basicamente em três áreas:
Processamento de Baixo Nível; Processamento de Nível Intermediário e
Processamento de Alto Nível, conforme pode-se visualizar na Figura 11.
Embora não existam fronteiras bem definidas, estas subdivisões fornecem um
esquema de trabalho, facilitando a categorização de diversos processos necessários
para o desenvolvimento de uma aplicação de análise automática de imagens
(GONZALEZ; WOODS, 2000).

Figura 11 - Níveis de processamento de imagens.

Fonte: GONZALEZ; WOODS, 2000.


26

A partir do Domínio do Problema, o Processamento de Baixo Nível consiste


na Aquisição da Imagem, assim como descrito na seção 2.2.1, e no Pré-
processamento, o qual inclui atividades como redução de ruído e realce de
características de uma imagem. Sendo assim, tratam-se de funções automáticas, as
quais não requerem qualquer inteligência por parte do sistema de análise
(ALBUQUERQUE et al, 2004; GONZALEZ; WOODS, 2000).
Em seguida, conforme Gonzalez; Woods (2000), tem-se o Nível Intermediário
de Processamento, o qual inclui os elementos de Segmentação e Representação e
Descrição. Basicamente, a tarefa desses elementos resume-se a extrair e caracterizar
componentes da imagem resultante do processo anterior. Devido a isso, esse nível
necessita de inteligência envolvida para construção dos procedimentos.
Finalmente, no Processamento de Alto Nível é realizada a operação de
Reconhecimento e Interpretação, onde predominam técnicas de reconhecimento por
decisão teórica e métodos estruturais para o reconhecimento e interpretação de
imagens baseados em inteligência artificial (GONZALEZ; WOODS, 2000).
Sendo assim, categoriza-se o desenvolvimento da presente aplicação de
detecção de ultrapassagens veiculares irregulares como Processamento de Nível
Intermediário, onde o processo de Segmentação, o qual será descrito na seção 2.4.3,
torna-se fundamental para o correto funcionamento da aplicação.

2.4 TÉCNICAS DE TRANSFORMAÇÃO E ANÁLISE DE IMAGENS

Tendo em vista os níveis de processamento, assim como seus elementos


constituintes, faz-se necessário um conjunto de técnicas de transformações de
imagem de forma a realizar as diferentes etapas, possibilitando o desenvolvimento da
aplicação de análise automática de imagem. Entre as técnicas envolvidas no
processo, citam-se: análise de histograma, mascaramento, segmentação, detecção
de bordas, operações de morfologia matemática, entre outras. (NIKU, 2013).
As seções seguintes apresentam os aspectos teóricos e práticos das técnicas
propostas para o desenvolvimento do presente trabalho, as quais serviram de base
para a implementação do algoritmo.
27

2.4.1 Histograma de imagens

O histograma de uma imagem é definido como “um conjunto de números


indicando o percentual de pixels naquela imagem que apresentam um determinado
nível de cinza.” (MARQUES FILHO; VIEIRA NETO, 1999, p. 55). Através dele obtém-
se uma indicação quanto a qualidade de uma imagem, ou seja, nível de contraste e
brilho médio (imagem clara ou escura). Matematicamente, cada elemento desse
conjunto é determinado pela Equação 10:

𝑛𝑘 (10)
𝑝𝑟 (𝑟𝑘 ) =
𝑛

na qual: 0 ≤ 𝑟𝑘 ≤ 1; 𝑘 = 0,1, … , 𝐿 − 1, L é o número de níveis de cinza; 𝑛 é o número


total de pixels da imagem; 𝑝𝑟 (𝑟𝑘 ) representa a probabilidade do k-ésimo nível de cinza
e 𝑛𝑘 é o número de pixels cujo nível de cinza corresponde a k.
Na Figura 12(a), a primeira coluna indica a intensidade, ou então o nível de
cinza. A segunda coluna, apresenta a quantidade de pixels associado ao tom de cinza
correspondente. Já na terceira coluna, representa-se a probabilidade de um pixel da
imagem apresentar o nível de cinza correspondente. Na Figura 12(b), a representação
gráfica do histograma é apresentada.

Figura 12 - Exemplo de histograma para uma imagem de 128 x 128 pixels, com 8 níveis de cinza. (a)
Tabela de dados; (b) Histograma.

Fonte: Modificado de MARQUES FILHO; VIEIRA NETO, 1999.

Em uma imagem monocromática, todos os elementos de um vetor de L


(número de níveis de cinza) elementos são iniciados com zero. Então a imagem é
percorrida pixel a pixel, incrementando-se a posição do vetor cujo índice corresponde
ao tom de cinza do pixel visitado. Dessa forma, após percorrer toda imagem, cada
28

elemento do vetor armazenará o número de pixels cujo tom de cinza equivale ao índice
do elemento. Finalmente, dividindo-se cada um desses elementos pelo total de pixels
da imagem, estes valores são normalizados, gerando assim o histograma (MARQUES
FILHO; VIEIRA NETO, 1999).
Pode-se notar na Figura 13(a), uma imagem predominantemente escura
(brilho reduzido), o que se visualiza no histograma logo ao seu lado como uma grande
concentração de pixels aproximando-se dos valores mais baixos da escala de cinza.
Na Figura 13(b), tem-se uma imagem clara (brilho intensificado), o que se apresenta
graficamente no histograma pela grande concentração de pixels com valores próximos
ao limite superior da escala de cinza. Analisando-se os histogramas, verifica-se que
em ambos os casos a maioria dos pixels concentra-se em uma estreita faixa de escala
de cinza, o que as caracteriza como imagens de baixo contraste segundo a literatura
de PADI. (MARQUES FILHO; VIEIRA NETO, 1999).

Figura 13 - Imagens monocromáticas e seus respectivos histogramas. (a) Imagem escura; (b)
Imagem clara.

Fonte: Modificado de MARQUES FILHO; VIEIRA NETO, 1999.

• Ajuste de contraste
A equalização do histograma, segundo Marques Filho; Vieira Neto (1999),
consiste em redistribuir os valores de níveis de cinza dos pixels em uma imagem, com
a finalidade de obter um histograma uniforme, onde o percentual de pixels de qualquer
nível de cinza seja praticamente o mesmo. Como resultado tem-se a modificação do
contraste da imagem.
29

Em algumas ocasiões ocorre a necessidade de aumento do contraste. Isso é


justificável pelo fato de que imagens com baixo contraste dificultam o discernimento
dos objetos em uma cena. Em outras aplicações, no entanto a operação de reduzir o
contraste se faz necessária (MATIAS, 2007).
Para aumentar o contraste realiza-se a operação de expansão de histograma.
Basicamente essa técnica consiste em multiplicar os níveis de cinza do pixel por um
número. Com isso, enquanto os níveis de cinza máximos disponíveis não forem
ultrapassados, no caso 255 (imagem monocromática), a faixa do histograma é
estendida e tem-se o aumento do contraste (Figura 14). MARQUES FILHO; VIEIRA
NETO, 1999; NIKU, 2013).

Figura 14 - Aplicação da técnica de expansão de histograma. (a) Imagem original e respectivo


histograma; (b) Imagem com contraste aprimorado e novo histograma.

Fonte: Modificado de MARQUES FILHO; VIEIRA NETO, 1999.

Para diminuir o contraste, realiza-se a operação inversa da anterior, aplicando


a técnica de compressão de histograma. Basicamente o histograma original (Figura
15(a)) é modificado de forma que ocorra uma redução da diversidade de níveis de
cinza na imagem, visto que esses passam a ocupar uma estreita faixa de valores,
conforme histograma ilustrado na Figura 15(b). (MARQUES FILHO; VIEIRA NETO,
1999; NIKU, 2013).
30

Figura 15 - Aplicação da técnica de compressão de histograma. (a) Imagem original com respectivo
histograma; (b) Imagem com contraste diminuído e novo histograma.

Fonte: Modificado de MARQUES FILHO; VIEIRA NETO, 1999.

• Ajuste de brilho
A equalização do histograma também permite ajustar o brilho de uma imagem.
Para realizar tal ajuste, basicamente todos os valores de cinza da imagem são
aumentados ou diminuídos na mesma proporção. Sendo assim, ao adicionar um
número, por exemplo, a todos os valores de cinza, tem-se como resultado um
deslocamento à direita no histograma. Com isso, os pixels da imagem passam a ter
níveis de cinza mais próximos do limite superior da escala (255 – branco). Dessa
forma a imagem se torna mais brilhante (Figura 13(b)). O mesmo é válido para reduzir
o brilho de uma imagem, no entanto, em ambos os casos, assim como a operação de
ajuste de contraste, deve-se atentar ao limite da escala (0 ou 255) (NIKU, 2013).

2.4.2 Operações de convolução com máscaras

Em processamento de imagens, o conceito de convolução com máscaras é


utilizado em inúmeras operações, tais como filtros, detecção de bordas, morfologia
matemática, entre outras. Essas operações constituem processos no domínio espacial
da imagem e dessa forma, acessam e operam sobre as informações de pixels
individuais (MARQUES FILHO; VIEIRA NETO, 1999; NIKU, 2013).
Sendo assim, seja uma subárea de uma imagem (Figura 16(a)), na qual cada
pixel é representado simbolicamente pelas letras A, B, C e assim sucessivamente,
com seu respectivo nível de cinza e uma máscara ou núcleo 3 x 3, cujos valores em
cada célula são indicados por m1 a m9 conforme ilustrado na Figura 16(b), a
31

sobreposição da segunda sobre a primeira, muda a imagem pixel por pixel (NIKU,
2013).

Figura 16 - Operação de convolução com máscaras. (a) Subárea de uma imagem; (b) Máscara 3 x 3.

Fonte: Modificado de NIKU, 2013.

A operação de convolução inicia no canto superior esquerdo da imagem, e


como as primeiras e ultimas linhas não são afetadas, geralmente elas são ignoradas
ou copiadas em uma camada adicional de linhas e colunas situada ao redor da
imagem para posterior cálculo de seus novos valores.
Conforme Niku (2013, p. 301):

[...] Cada etapa consiste em sobrepor as células da máscara aos pixels


correspondentes, multiplicando os valores das células da máscara pelos
valores de pixel, somando os números, e normalizando o resultado. O
resultado é substituído no centro da área de interesse. A máscara é movida
sobre pixel por pixel e a operação é repetida até que a imagem seja
completamente processada.

O primeiro processo de convolução para a imagem da Figura 16 é


exemplificado pela Equação 11. O valor de R obtido é substituído no valor do pixel no
centro do bloco o qual foi sobreposto, no caso F (NIKU, 2013).

(𝐴 × 𝑚1 + 𝐵 × 𝑚2 + 𝐶 × 𝑚3 + 𝐸 × 𝑚4 + 𝐹 × 𝑚5 + 𝐺 × 𝑚6 + 𝐼 × 𝑚7 + 𝐽 × 𝑚8 + 𝐾 × 𝑚9 ) (11)
𝑅=
𝑆

onde S é determinado pela Equação 12:

𝑆 = |𝑚1 + 𝑚2 + 𝑚3 + ⋯ + 𝑚9 | (12)

Ainda, segundo Niku (2013), o valor de S na Equação 11, é denominado


escala S ou fator de normalização, e deve ser diferente de zero. Sendo assim, caso a
soma dos valores da máscara seja igual a zero, arbitra-se S=1 ou escolhe-se o maior
número, de forma a obter a melhor imagem sem saturação.
32

2.4.3 Segmentação

O processo de segmentação de uma imagem consiste em subdividir uma


imagem em suas partes ou objetos constituintes. Segundo Gonzalez; Woods (2000),
em sistemas que necessitem identificar veículos em uma estrada, que é o caso do
presente trabalho, o primeiro passo é a segmentação da estrada na imagem, seguida
da segmentação dos elementos que constituem a estrada em objetos, os quais
tenham um tamanho pertencente a uma faixa de tamanhos correspondente a um
veículo. Nesse sentido, não existe a necessidade de segmentar objetos ou
componentes que se encontram fora da estrada.
Na implementação de algoritmos de segmentação de imagens em escala de
cinza (monocromáticas), duas abordagens são realizadas: descontinuidade, onde as
principais áreas de interesse são a detecção de pontos isolados, linhas e bordas na
imagem; e similaridade, a qual baseia-se em limiarização, crescimento, divisão e
fusão de regiões (GONZALEZ; WOODS, 2000).

• Detecção de descontinuidades
O processo de segmentação por descontinuidade consiste em particionar a
imagem através da detecção de mudanças bruscas nos níveis de cinza. Basicamente
é realizada uma varredura na imagem através de máscaras, conforme descrito na
seção 2.4.2. Com isso, é possível detectar os três tipos básicos de descontinuidades
em imagens digitais: pontos, linhas e bordas.
Sendo assim, seja uma máscara genérica determinada conforme a Figura 17.

Figura 17 - Máscara 3 x 3 genérica.

Fonte: MARQUES FILHO; VIEIRA NETO, 1999.

A resposta da máscara em qualquer ponto é dada pela Equação 13


(GONZALEZ; WOODS, 2000, p. 296):
9

𝑅 = ∑ 𝑊𝑖 𝑍𝑖 (13)
𝑖=1
33

na qual 𝑊𝑖 é o coeficiente da máscara e 𝑍𝑖 representa o nível de cinza do pixel.

• Detecção de pontos
A detecção de um ponto em uma imagem resume-se à utilização de um
operador de convolução (máscara), como por exemplo, a ilustrada na Figura 18.
Observa-se que a máscara utilizada possui valor elevado na célula central e valores
baixos nas outras células (GONZALEZ; WOODS, 2000; LIMA, 2009).

Figura 18 - Máscara para a detecção de pontos isolados.

Fonte: MARQUES FILHO; VIEIRA NETO, 1999.

Conforme Gonzalez; Woods (2000), partindo do princípio de que um ponto


isolado possui nível de cinza completamente diferente do nível de cinza de seus
vizinhos, um ponto é detectado na posição da máscara se a condição (Equação 14)
for satisfeita:
|𝑅|>𝑇 (14)

na qual 𝑇 representa um limiar não-negativo e 𝑅 é a resposta da máscara dada pela


Equação 13.
Dessa forma, na imagem final, obtida após a aplicação da máscara, pixels
brilhantes circundados por pixels mais escuros tornam-se mais destacados
(MARQUES FILHO; VIEIRA NETO, 1999). Na Figura 19(a), nota-se uma porosidade
no canto superior direito da imagem da lâmina da turbina, a qual, após a aplicação da
técnica de detecção de ponto torna-se claramente visível (Figura 19(b)).
34

Figura 19 – (a) Radiografia de uma lâmina de turbina de um motor de jato. (b) Imagem obtida após
aplicação da técnica de detecção de pontos (ponto ampliado).

Fonte: Modificado de GONZALEZ; WOODS, 2010.

• Detecção de linhas
De forma semelhante à detecção de pontos, o processo de detectar linhas em
uma imagem também consiste basicamente da aplicação de máscaras de convolução.
Nesse caso são utilizadas quatro máscaras (Figura 20), as quais possibilitam detectar
linhas nas posições horizontal e vertical e nas diagonais de +45º e -45º. (GONZALEZ;
WOODS, 2000; LIMA, 2009; MARQUES FILHO; VIEIRA NETO, 1999).

Figura 20 - Máscara para detecção de linhas. (a) Horizontal (b) Vertical (c) +45º (d) -45º.

Fonte: Modificado de MARQUES FILHO; VIEIRA NETO, 1999.

• Detecção de bordas
Diferentemente do processo de detecção de pontos e de linhas, que utilizam
a operação direta de varredura de imagens através de máscaras, o processo de
detecção de bordas baseia-se na computação de um operador local diferencial. Trata-
se da abordagem mais comum na detecção de descontinuidades, visto que pontos e
linhas isoladas não ocorrem frequentemente em aplicações práticas (GONZALEZ;
WOODS, 2000).
Segundo definição, “uma borda é o limite entre duas regiões com
propriedades relativamente distintas de nível de cinza” (GONZALEZ; WOODS, 2000,
35

pg. 297). Idealmente uma borda envolve a transição entres dois níveis de intensidade,
que ocorrem a uma distância de 1 pixel, conforme Figura 21(a). Entretanto, na prática,
o comportamento da transição entre níveis designa um perfil de rampa, como a
demonstrada na Figura 21(b), onde o conjunto de pontos conectados constitui um
segmento de borda.

Figura 21 - Modelos de borda. (a) Ideal (b) Real.

Fonte: GONZALEZ; WOODS, 2010.

Sendo assim, seja o modelo real (perfil de rampa), o cálculo da primeira e


segunda derivadas tem como resultado os formatos ilustrados na Figura 22.
Percorrendo o perfil de intensidade horizontal da esquerda para a direita, a primeira
derivada é positiva durante o crescimento da rampa, e torna-se zero nas áreas de
intensidade constante. Para a segunda derivada, tem-se que esta é positiva no início
da rampa, negativa no final dela e zero nos demais pontos (GONZALEZ; WOODS,
2010).

Figura 22 - Borda real e representação de 1ª e 2ª derivadas.

Fonte: GONZALEZ; WOODS, 2010.

Com isso, através da magnitude da primeira derivada é possível detectar a


presença de borda em um ponto de uma imagem, e o sinal da segunda derivada pode
ser usado para detectar se um pixel se encontra no lado escuro ou claro de uma borda.
Esses conceitos originam duas classes de operadores diferenciais: Diferenciador de
36

Primeira Ordem, e Diferenciador de Segunda Ordem (GONZALEZ; WOODS, 2010;


MATIAS, 2007).
O Diferenciador de Primeira Ordem é definido como o Gradiente de uma
imagem. Trata-se de um vetor que aponta na direção de mudança mais rápida (taxa
de variação) de f (intensidade) na posição (x, y). Seus valores são calculados a partir
da obtenção de derivadas parciais na posição de cada pixel (GONZALEZ; WOODS,
2010; MATIAS, 2007), conforme Equação (15):

𝜕𝑓
𝑔𝑥 𝜕𝑥
∇𝑓 = 𝑔𝑟𝑎𝑑(𝑓) = [ ] = [𝜕𝑓] (15)
𝑔𝑦
𝜕𝑦

Em termos práticos a aproximação digital das derivadas parciais é realizada


filtrando f (x,y) com máscaras. Dessa forma, utilizando a operação de convolução com
máscaras é possível determinar o valor do gradiente. Em seguida “o valor do gradiente
em cada pixel é comparado com um limiar (threshold) em tons de cinza. A borda
surgirá se o gradiente da função no pixel de coordenadas (x, y) exceder este valor de
limiar” (MATIAS, 2007, p. 17).
Entre as principais máscaras utilizadas nesse processo estão as definidas
como operador de Roberts (Figura 23(a)) e operador de Prewitt (Figura 23(b)).

Figura 23 - Máscaras detectoras de borda. (a) Roberts; (b) Prewitt.

Fonte: Modificado de GONZALEZ; WOODS, 2010.

Com os valores de 𝑔𝑥 e 𝑔𝑦 calculados, aproxima-se o valor do gradiente com


valores absolutos, conforme Equação 16 (GONZALEZ; WOODS, 2000, p. 299).

∇𝑓 ≈ |𝑔𝑥 | + |𝑔𝑦 | (16)


37

Um resultado da aplicação do operador de Prewitt pode ser visualizado na


Figura 24(b). Pode-se notar que, com a aplicação do operador as bordas são
realçadas, e tornam-se de certa forma claramente visíveis na imagem.

Figura 24 - (a) Imagem original monocromática; (b) Realce de bordas utilizando o operador de Prewitt
horizontal e vertical.

Fonte: Modificado de MARQUES FILHO; VIEIRA NETO, 1999.

O Diferenciador de Segunda Ordem, conhecido como Laplaciano, utiliza da


diferenciação espacial de segunda ordem para realçar as bordas de uma imagem.
Assim como o Gradiente, o cômputo é realizado através de derivadas parciais em
relação às coordenadas (x, y) da imagem (MATIAS, 2007). O Laplaciano de uma
função bidimensional é definido pela Equação 17 (GONZALEZ; WOODS, 2000, p.
300).

2
𝜕 2𝑓 𝜕 2𝑓 (17)
∇ 𝑓= +
𝜕𝑥 2 𝜕𝑦 2

A aproximação digital, da mesma forma como a do Gradiente, é realizada


através da filtragem da imagem através de uma máscara 3 x 3, conforme ilustrado na
Figura 25(a). Também pode-se visualizar o resultado (c) da aplicação da mesma sobre
a imagem (b).
38

Figura 25 - (a) Máscara utilizada no cômputo do Laplaciano; (b) Imagem original monocromática; (c)
Imagem após filtragem por (a).

Fonte: Modificado de MARQUES FILHO; VIEIRA NETO, 1999.

• Segmentação por similaridade


O processo de segmentação por similaridade baseia-se, assim como a
detecção de descontinuidades discutida anteriormente, em uma propriedade básica
dos valores de níveis de cinza de uma imagem. Nesse caso, levando em consideração
a semelhança entre pixels, a abordagem é realizada através de processos de
limiarização, divisão, fusão e crescimento de regiões. (GONZALEZ; WOODS, 2000).
O processo de Limiarização (Thresholding) consiste em dividir uma imagem
diretamente em regiões com base nos valores de intensidade (níveis de cinza). Nesse
sentido, seja o histograma (Figura 26), o qual representa a distribuição dos níveis de
cinza em uma imagem 𝑓(𝑥, 𝑦), composta por objetos iluminados sobre um fundo
escuro (GONZALEZ; WOODS, 2000).

Figura 26 - Histograma de níveis de cinza de uma imagem.

Fonte: GONZALEZ; WOODS, 2010.

Nota-se (Figura 26) que os pixels no Histograma se organizam basicamente


em dois grupos dominantes (modos). Dessa forma, através da seleção de um limiar
39

(T) é possível separar esses dois grupos. Basicamente é realizada uma varredura na
imagem, pixel por pixel, rotulando-se cada pixel como sendo do objeto ou do fundo,
levando em consideração se o nível de cinza daquele pixel for maior ou menor/igual a
T (GONZALEZ; WOODS, 2000; MATIAS, 2007).
Um aspecto importante a ser observado é que o valor de T influencia
diretamente na qualidade da imagem limiarizada. Nesse sentido, deve ser escolhido
um valor ótimo para T de forma que a imagem não sofra limiarização inadequada, o
que impossibilitaria a correta realização em posterior tarefa de análise (MATIAS,
2007).
A Limiarização é definida pela Equação 18, na qual 𝑓(𝑥, 𝑦) representa a
imagem original (entrada) e 𝑔(𝑥, 𝑦) representa a imagem transformada (saída)
(GONZALEZ; WOODS, 2000, p. 316).

1, 𝑠𝑒 𝑓(𝑥, 𝑦) > 𝑇 (18)


𝑔(𝑥, 𝑦) = {
0, 𝑠𝑒 𝑓(𝑥, 𝑦) ≤ 𝑇

Em termo práticos, os pixels correspondentes ao objeto são rotulados como


0, o que representa o limite superior da escala de cinza (branco), e os correspondentes
ao fundo são rotulados como 1 – limite inferior da escala de cinza (preto), conforme
ilustrado na Figura 27. Devido a isso, a técnica de Limiarização de imagens também
é conhecida como Binarização. (GONZALEZ; WOODS, 2000; MATIAS, 2007;
SANTOS, 2014).

Figura 27 - Exemplo de imagem binarizada.

Fonte: SANTOS, 2014.


40

2.4.4 Operações de Morfologia Matemática

Em Processamento e Análise de Imagens, operações realizadas na forma dos


componentes de uma imagem são denominadas operações de Morfologia
Matemática, e possuem como base a teoria dos conjuntos (GONZALEZ; WOODS,
2000). Entre as operações principais envolvidas têm-se: dilatação, erosão, abertura e
fechamento.
O objetivo principal dessas operações, aplicadas sobre imagens em escala de
cinza ou binárias, é extrair componentes, os quais sejam úteis para representar e
descrever a forma de uma região, como fronteiras por exemplo. Além disso, são
utilizadas para reduzir informações extras presentes muitas vezes na imagem e que
dificultam a tarefa de análise e reconhecimento de objetos (GONZALEZ; WOODS,
2000; NIKU, 2013).
“[...] Os conjuntos em morfologia matemática representam as formas dos
objetos em uma imagem. [...] (GONZALEZ; WOODS, 2000, p. 370). Sendo assim, em
uma imagem binária, por exemplo, a sua descrição completa é realizada através do
conjunto de todos os pixels pretos, os quais compõem o espaço bidimensional de
número inteiros Z2. Cada coordenada (x, y) dos pixels pretos compõe respectivamente
cada elemento do conjunto. No caso de uma imagem em escala de cinza a
representação é realizada em Z3, onde dois componentes de cada elemento do
conjunto se referem às coordenadas do pixel (x, y) na imagem, enquanto o terceiro
representa o valor discreto de intensidade (nível de cinza).
Uma operação de dilatação é descrita sucintamente como o processo de
expandir os componentes de uma imagem, enquanto que a erosão denomina o
processo inverso, ou seja, os componentes são reduzidos. Essas duas operações
constituem a base da maioria das outras operações. Nesse sentido, uma operação de
erosão, seguida de uma operação de dilatação é denominada abertura, conforme
descrito na Equação 19 (GONZALEZ; WOODS, 2000, p. 373):

𝐴 ∘ 𝐵 = (𝐴 ⊝ 𝐵) ⨁ 𝐵 (19)

na qual 𝐴 ∘ 𝐵 representa a abertura de um conjunto A por um elemento estruturante


B, 𝐴 ⊝ 𝐵 é a erosão de A por B, e o operador ⨁ simboliza a dilatação.
41

Uma operação de dilatação seguida de uma erosão é conhecida como


fechamento. Sendo assim, o fechamento de A por um elemento estruturante B,
simbolizado por 𝐴 ∙ 𝐵 é (GONZALEZ; WOODS, 2000, p. 374):

𝐴 ∙ 𝐵 = (𝐴 ⨁𝐵) ⊝ 𝐵 (20)

Na Figura 28(a), considerando que os dois objetos, representados por pixels


brancos na imagem, correspondem a veículos trafegando em uma rodovia. Em uma
tarefa de cálculo da área desses objetos, como forma de realizar o reconhecimento
dos mesmos, pontos escuros em seus interiores, assim como pontos claros
encontrados fora desses dificultam a análise. Esses pontos escuros, localizados no
interior dos objetos, poderiam ser interpretados como não pertencentes ao objeto e
pontos claros localizados fora deles poderiam ser interpretados como pertencentes,
gerando um erro no cálculo da área, o que prejudicaria tarefas de interpretação e
reconhecimento.
Conforme Santos (2014), a operação de abertura (Equação 19) é utilizada
como forma de remover pequenos elementos desconexos indesejáveis em uma
imagem, conforme pode-se visualizar na Figura 28(b). O fechamento (Equação 20) é
utilizado como maneira de preencher espaços internos de elementos conexos,
conectando dessa forma esses elementos próximos (Figura 28(c)). Sendo assim, com
a utilização dessas técnicas facilita-se o reconhecimento de objetos por
características, a ser descrito na seção seguinte.

Figura 28 - (a) Imagem limiarizada; (b) Resultado da abertura sobre (a); (c) Resultado do fechamento
sobre (b).

Fonte: Modificado de SANTOS, 2014.


42

2.4.5 Reconhecimento de objetos por características

Em uma determinada imagem, objetos podem ser reconhecidos por suas


características, as quais podem incluir: Análise de histograma, onde através dos níveis
de cinza máximo, médio ou mínimo, pode-se realizar uma comparação com uma base
já conhecida e assim identificar um objeto em uma imagem; Características
morfológicas, como área e perímetro de uma região da imagem, através de equações
de momento e relação de aspecto, onde a relação mínima entre a largura e
comprimento de um retângulo envolvendo um objeto é utilizada para reconhecimento
do mesmo (NIKU, 2013).

• Momento de um objeto
Segundo Niku (2013), o momento de um objeto em uma imagem em escala
de cinza pode ser determinado pela Equação 21.

𝑀𝑎,𝑏 = ∑ 𝑥 𝑎 𝑦 𝑏 𝐼𝑥,𝑦 (21)


𝑥,𝑦

na qual 𝑀𝑎,𝑏 é o momento do objeto com índices a e b, x e y são as coordenadas de


cada pixel, e 𝐼𝑥,𝑦 é a intensidade do pixel.
Sendo uma imagem binária, 𝐼𝑥,𝑦 (intensidade) possui apenas dois valores: 1
(ligado) para o objeto e 0 (desligado) para o fundo, sendo assim, apenas os pixels
ligados são ativados e a Equação 21 resume-se à Equação 22 (NIKU, 2013, p. 325):

𝑀𝑎,𝑏 = ∑ 𝑥 𝑎 𝑦 𝑏 (22)
𝑥,𝑦

O cálculo do momento é efetuado determinando primeiramente se o pixel


pertence ao objeto (ligado). Em seguida é descrita a coordenada da localização do
pixel para os valores de a e b dados. A localização é baseada na medida de distância
de x e y em relação a um sistema de coordenadas (x1, y1) formados pela primeira linha
e coluna da imagem, conforme pode-se visualizar na Figura 29. Finalmente, com o
somatório da operação sobre toda imagem obtém-se o momento particular do objeto
(NIKU, 2013).
43

Figura 29 - Sistema de coordenadas para cálculo do Momento de um objeto.

Fonte: NIKU, 2013.

Na Equação 22, com 𝑎 = 0 e 𝑏 = 0, o momento do objeto define-se por:

𝑀0,0 = ∑ 𝑥 0 𝑦 0 (23)
𝑥,𝑦

Sendo assim, uma vez que todo número elevado à potência 0 é igual a 1,
todos os 𝑥 0 𝑒 𝑦 0 são iguais a 1, e portanto, o momento 𝑀0,0 corresponde a soma de
todos os pixels ligados, o que determina a área do objeto. Pode-se também determinar
a localização do centroide do objeto, calculando a localização do centro da área em
relação aos eixos x e y conforme as Equações 24 e 25 respectivamente (NIKU, 2013,
p. 326):
∑𝑦 𝑀0,1 (24)
𝑦̅ = =
á𝑟𝑒𝑎 𝑀0,0
∑𝑥 𝑀1,0 (25)
𝑥̅ = =
á𝑟𝑒𝑎 𝑀0,0

Finalmente, conforme Niku (2013), pode-se concluir que, com a utilização das
equações de momento, é possível identificar um objeto em uma imagem através da
comparação da área do mesmo com uma área aproximada (conhecida). Além disso,
é possível determinar a localização do mesmo dentro da imagem, o que constitui uma
informação de grande valia no desenvolvimento de aplicações de rastreamento de
objetos.
44

2.5 MATLAB

O MATLAB, abreviação de “Laboratório de Matrizes”, do inglês MATrix


LABoratory, é um programa utilizado para cálculos matemáticos e matriciais,
inicialmente desenvolvido na década de 70 por Clever Moler, na época, presidente do
departamento de Ciências da Computação da Universidade do Novo México. Em
1984, foi reescrito na linguagem C pela MathWorks Inc., atual detentora dos direitos
autorais (CHAIA; DAIBERT, 2013; MARQUES FILHO; VIEIRA NETO, 1999).
Nesse programa todas as variáveis são dimensionadas automaticamente, e
são tratadas como matrizes, o que facilita a implementação de algoritmos matriciais,
que são a base do processamento e análise de imagens. Aliado a isso, o software
possui um extenso conjunto de rotinas de representação gráfica, possibilitando
também a criação de programas, conhecidos como arquivos-M ou scripts, os quais
armazenam uma sequência de comandos e funções programadas pelo usuário
(MARQUES FILHO; VIEIRA NETO, 1999).
Segundo Trindade; Sampaio (2010), o MATLAB possui uma linguagem de
programação muito intuitiva, além disso, os arquivos .m (algoritmos), possibilitam a
criação de diversos conjuntos de funções específicas (toolboxes – caixas de
ferramentas) a determinadas áreas, como análise de sinais por exemplo. Sendo
assim, e considerando que os programas e funções independem da plataforma
utilizada, seja ela Unix, Windows, permite-se o compartilhamento de conhecimento
cientifico entre os profissionais do meio acadêmico e industrial, o que facilita
desenvolvimento de aplicações nas mais diversas áreas tecnológicas.
Conforme o desenvolvedor, na área de processamento de imagem e visão
computacional o software permite, entre outras diversas funções: adquirir imagens e
vídeos diretamente de hardware de imagem compatível com PC; usar ferramentas
gráficas para visualização e manipulação de imagens e vídeos, resolvendo problemas
de pré e pós processamento, como ruído e baixo contraste, ou realizar a análise de
vídeos com métodos de detecção de borda; além de possibilitar a migração dos
projetos desenvolvidos para sistemas embarcados (MATHWORKS, 2018a).
Diante dessas diversas funcionalidades e capacidades, fica evidente que o
software atende de forma amplamente satisfatória aos requisitos para o
desenvolvimento do presente projeto e, portanto, utilizou-se dele como ambiente de
implementação do algoritmo de detecção de ultrapassagens.
45

3 METODOLOGIA

3.1 MÉTODO DE ABORDAGEM

O método de abordagem de pesquisa utilizada no trabalho caracteriza-se


como método dedutivo. Trata-se de um método que parte do geral ao particular,
possibilitando conclusões baseadas unicamente na logicidade de princípios
reconhecidos como verdadeiros (GIL, 2008).
Nesse sentido, a partir de um conjunto geral de técnicas utilizadas no
processamento e análise de imagens, chega-se à melhor alternativa para o
desenvolvimento do sistema em específico, no caso, detecção de ultrapassagens
veiculares irregulares.

3.2 TÉCNICAS DE PESQUISA

O desenvolvimento do presente trabalho tem como base a pesquisa


exploratória, a qual proporciona uma visão geral acerca do problema. Segundo Gil
(2002, 2008) esse tipo de pesquisa permite, através do levantamento bibliográfico e
documental, desenvolver, esclarecer e modificar ideias e conceitos, com vistas a
tornar o problema mais explícito ou a constituir hipóteses.
Nesse contexto, o algoritmo desenvolvido em plataforma MATLAB contempla
cada etapa de um sistema de PADI, conforme proposto por Gomes (2007) e ilustrado
na Figura 30, em sintonia com os aspectos teóricos apresentados durante a revisão
da bibliografia.

Figura 30 - Sequência do PADI.

Fonte: Gomes, 2007.


46

Na primeira etapa é realizado o processo de aquisição da imagem. Esse


processo representa basicamente a captura da imagem em um local de aplicação da
ferramenta, por exemplo, uma rodovia, através de uma câmera fixa.
Com a imagem obtida, o próximo passo consiste em converter a imagem do
formato RGB (colorida) para escala de cinza. Conforme visto esse processo diminui a
quantidade de dados armazenados o que, por conseguinte acelera o processamento,
melhorando a performance da aplicação além de simplificar o processo de análise, no
momento em que se passa a trabalhar com apenas uma matriz de dados.
Na etapa de Pré-processamento é realizado o ajuste do brilho e do contraste,
como forma de melhorar a imagem. Com isso destacam-se os objetos presentes na
cena, como por exemplo, um carro ou uma faixa contínua, o que facilita a etapa
posterior de segmentação.
Dando continuidade, o processo de Segmentação trata de separar a imagem
em grupos de pixels de interesses ou objetos, atuando de duas formas. Em um
primeiro momento, a partir da imagem pré-processada, seleciona-se a região de
interesse da imagem (ROI – Region of Interest), no caso o centro da pista, onde se
localizam o limite/divisão entre pistas simples de mão dupla, representadas por
sinalização horizontal do tipo linha dupla contínua, ou tracejada/seccionada amarela.
Mais especificamente esse processo, consiste em selecionar a região onde
encontram-se esses elementos (aproximadamente 40% da imagem – área central)
utilizando indexação de matrizes. A partir disso a imagem é binarizada e operações
de morfologia matemática são realizadas de forma a rotular os objetos da região com
posterior cálculo do número de objetos presentes. Com isso, o algoritmo é capaz de
determinar se a linha presente na imagem se trata de linha contínua, nesse caso
realiza as etapas posteriores visto que a ultrapassagem não é permitida nessa
situação, ou então, se trata de linha tracejada, onde a ultrapassagem é permitida.
Em um segundo momento, após identificada a faixa, e caso esta não permita
a ultrapassagem, o algoritmo determina se algum objeto se sobrepõe a mesma, o que
caracteriza a infração de ultrapassagem irregular no caso de o objeto ser um veículo.
Para isso, utilizou-se primeiramente um processo de mapeamento da faixa contínua
através de laços de repetição, vetores e indexação de matrizes. Mais especificamente
nessa etapa o algoritmo armazena as informações de onde se localiza a faixa na
imagem a fim de comparar com uma imagem posterior. Dessa forma, é capaz de
determinar se os pixels da faixa se alteraram. Caso ocorra essa alteração, armazena-
47

se a informação do local em que essa mudança ocorreu e isola-se o objeto que se


sobrepôs à linha realizando posteriormente uma operação de identificação do mesmo.
Caso contrário o algoritmo retorna e repete o processo de comparação até localizar
alguma mudança.
Para identificar o objeto sobreposto à faixa contínua amarela primeiramente
binariza-se a imagem do objeto, a partir da seleção da ROI realizada pela etapa
anterior. Dessa forma, seguindo o processo de segmentação por similaridade
(limiarização) e associando operações de morfologia matemática, pode-se discriminar
o objeto em relação ao fundo da imagem da pista. Nessa etapa operações
morfológicas como dilatação, erosão, abertura e fechamento binário foram utilizadas
como forma de homogeneizar o objeto e o fundo. A partir disso, com a rotulação do
objeto pode-se realizar o cálculo da área do mesmo, através de comandos realizados
pelo toolbox (caixa de ferramentas) de processamento de imagens do MATLAB, que
ao ser comparada com uma área predeterminada caracteriza-o como veículo ou não.
Cabe salientar que a etapa de extração de atributos e reconhecimento e
classificação atuam juntas com a segmentação. Entre os atributos obtidos têm-se a
área da sinalização horizontal (faixa contínua ou tracejada amarela), o número de
objetos da ROI, os pontos de intersecção do objeto sobre a faixa contínua e a área do
objeto que causou a descontinuidade de faixa.
Caso o objeto que se sobrepôs à faixa continua seja um veículo, a imagem é
armazenada, possibilitando uma eventual tarefa de identificação da placa e aplicação
da penalidade ao infrator, a qual foge do escopo do presente trabalho. Caso contrário
o algoritmo volta a monitorar as imagens, repetindo o processo descrito. O fluxograma
(Figura 31) exemplifica o método de detecção relatado.
48

Figura 31 - Fluxograma resumido do algoritmo de detecção de ultrapassagens.

Fonte: Elaborada pelo autor.


49

4 IMPLEMENTAÇÃO E ANÁLISE DE FUNCIONAMENTO DO ALGORITMO

O algoritmo implementado é organizado basicamente em três etapas,


conforme pode-se visualizar na Figura 32; A primeira, visa classificar o tipo de
sinalização horizontal presente, indicando se a ultrapassagem é permitida ou não para
o trecho analisado. Em seguida, caso a ultrapassagem seja proibida passa para uma
segunda etapa, visando detectar a descontinuidade de faixa, ou seja, identifica se
algum objeto se sobrepõe à linha central. Em uma terceira etapa o objeto que causou
a descontinuidade é isolado e são executadas operações de forma a identificar se o
objeto é um veículo ou não. Sendo assim, caso o objeto seja um veículo a imagem é
armazenada.

Figura 32 - Etapas de PADI do algoritmo implementado.

Fonte: Autoria própria.

Como base para elaboração e análise do algoritmo foi utilizada uma imagem
retirada da internet de uma pista de mão dupla, com sinalização horizontal do tipo
faixa dupla contínua amarela (Figura 33).

Figura 33 - Imagem base para elaboração do algoritmo de detecção.

Fonte: BRASIL, 2018.


50

A partir dela realizaram-se algumas manipulações (Figura 34) de forma a


simular situações que poderiam ocorrer no ambiente de utilização da aplicação, como
presença de faixas contínuas, tracejadas, ultrapassagem irregular e condições
normais de tráfego.

Figura 34 – Situações simuladas. (a) Presença de faixa tracejada/seccionada amarela; (b) Condição
de ultrapassagem irregular; (c) Condição normal de tráfego.

Fonte: Modificado de Brasil, 2018; Contesini, 2014.

4.1 DETECÇÃO DO TIPO DE SINALIZAÇÃO HORIZONTAL

Nessa etapa, o algoritmo realiza a leitura de uma imagem obtida a partir de


uma câmera fixa, posicionada sobre o centro de uma via de mão dupla, e a partir disso
determina qual o tipo de sinalização horizontal está presente no local, ou seja, se é
linha contínua ou tracejada.

4.1.1 Análise considerando a presença de faixa dupla continua

Inicialmente, o programa implementado realiza a leitura e apresenta a


imagem, conforme pode-se visualizar na Figura 35.
51

Figura 35 – Imagem adquirida da pista de mão dupla.

Fonte: Autoria própria.

Trata-se de uma imagem colorida (Figura 35), interpretada pelo MATLAB


como uma matriz M-por-N-por-3, onde M é o número de linhas, N é o número de
colunas e 3 corresponde aos canais de cores: vermelho, verde e azul (sistema RGB).
Na janela de trabalho do programa pode-se verificar que a imagem possui as
seguintes dimensões: 340x500x3. Sendo assim, é representada através de 3
matrizes, cada uma com 340 linhas e 500 colunas.
Quanto à classe de dados, a imagem em questão é do tipo “uint8” (Inteiros 8
bits), o que indica que possui 8 bits de resolução. Sendo assim, pode assumir 2^8=256
níveis de coloração (de 0 até 255, onde 0 representa o preto e 255 o branco) para os
três canais de cores.
Em seguida a imagem é convertida para escala de cinza. Para isso, utilizou
se da função ‘rgb2gray’, a qual, segundo MATHWORKS (2018o), converte valores
RGB em valores de escala de cinza através de uma soma ponderada dos
componentes, R, G e B. Essa soma leva em consideração o seguinte critério:
0,2989*R + 0,5870*G + 0,1140*B.
Com a conversão para escala de cinza (monocromática), a nova imagem,
ilustrada pela Figura 36 juntamente com o seu histograma, passa a ser representada
através de uma única matriz de dimensões 340x500. Cabe salientar que a classe de
dados se mantém como ‘uint8’.
52

Figura 36 - Imagem da pista de mão dupla convertida para escala de cinza e respectivo histograma.

Fonte: Autoria própria.

A partir disso, é realizado o ajuste do brilho utilizando o método proposto por


Medeiros (2014) como forma de facilitar a tarefa posterior de limiarização. Nesse caso,
subtraiu-se da imagem em escala de cinza uma constante, de valor igual a 80,
diminuindo-se assim o brilho da imagem. Esse valor foi obtido a partir de uma série
de testes, os quais constituíam basicamente em modificar esse valor e observar os
resultados na nova imagem e histograma, assim como seus efeitos após a etapa de
ajuste de contraste e binarização.
Deve-se levar em consideração que ao executar operações matemáticas
sobre uma imagem, como por exemplo, valor do pixel = 53/2 = 26,5, é necessário
assumir valores fracionários, o que não é possível utilizando a classe de dados ‘uint8’,
a qual assume somente número inteiros positivos. Sendo assim, o MATLAB altera
automaticamente a classe de dados, nesse caso, para efetuar essa operação de
soma, passando a imagem de ‘uint8’ para ‘double’. Com essa nova classe os pixels
podem assumir valores fracionários positivos ou negativos e a imagem pode ser
manipulada sem restrições (ZANOTTA, 2015).
A imagem com o brilho ajustado juntamente com seu histograma pode ser
visualizada na Figura 37.
53

Figura 37 - Imagem com o brilho ajustado e respectivo histograma.

130

Fonte: Autoria própria.

Pode-se observar, nesse caso, que a imagem da Figura 37 se tornou mais


escura em comparação com a imagem da Figura 36, o que também pode ser
visualizado com o deslocamento à esquerda do histograma (Figura 37), provocado
pelo ajuste realizado. Basicamente, com esse deslocamento os pixels passam a ter
valores que se aproximam do limite inferior da escala de cinza (0 – preto).
Após, realiza-se o ajuste do contraste da imagem, utilizando um valor de limiar
igual a 130 (indicado no histograma da Figura 37) Este valor foi obtido a partir de
simulações e de testes, e levando em consideração a conversão entre classes de
dados assim como a operação de potenciação (*103) realizada, conforme método
proposto por Medeiros (2014).
Basicamente, nesse processo, todos os valores abaixo de 130 são atenuados,
assumindo valores entre 0 e 1 e acima disso são realçados, assumindo números
maiores que 1. A partir disso, com a operação de potenciação valores maiores que 1
ficam ainda maiores, e valores menores que 1 ainda menores. Em seguida conclui-se
a operação convertendo novamente a imagem para classe ‘uint8’ após multiplicar os
novos valores pelo limiar utilizado.
A imagem obtida com a realização desse processo está ilustrada na Figura
38.
54

Figura 38 - Imagem com contraste ajustado e respectivo histograma.

ROI

Fonte: Autoria própria.

Segundo o histograma da Figura 38, pode-se perceber que este foi expandido,
em relação ao histograma da Figura 37, o que indica visualmente a aplicação da
técnica de expansão de histograma para o ajuste de contraste explanada
anteriormente.
Conforme também visto durante a revisão bibliográfica, o ajuste de contraste
visa melhorar o discernimento dos objetos em uma cena. No caso da análise, o objeto
da cena trata-se da linha dupla contínua que divide a pista. Sendo assim, analisando
a Figura 38, pode-se observar que esta tornou mais destacado o objeto em
comparação com a imagem da Figura 37, dessa forma pode-se dizer que o objetivo
do ajuste do contraste foi atingido.
Em seguida é realizada a seleção da região de interesse (ROI – Region of
Interest) a qual para o presente trabalho localiza-se no centro da imagem,
correspondendo a cerca de 40% da parte central (indicação em verde na Figura 38).
Horizontalmente também se retira da imagem a parte que não faz parte da pista,
eliminando-se assim elementos que possam vir a interferir na análise. Basicamente,
nessa etapa, utilizando-se de métodos de indexação de matrizes associados a
operações matemáticas, pode-se isolar a área da imagem que comporta a sinalização
horizontal de divisão de fluxos opostos da pista. A nova imagem obtida pode ser
visualizada na Figura 39.
55

Figura 39 - Região de interesse da pista e respectivo histograma.

111

Fonte: Autoria própria.

Pode-se observar no histograma da Figura 39 a concentração de dois grupos


distintos de pixels. Conforme visto, através da seleção de um limiar pode-se separar
esses dois grupos, classificando cada pixel como pertencente do objeto, no caso a
faixa contínua, ou do fundo. No caso da aplicação desenvolvida a seleção do limiar é
feita utilizando o Método de Otsu, um algoritmo presente na caixa de ferramentas de
processamento de imagem do MATLAB que seleciona o valor ideal de limiarização.
A seleção do limiar é realizada utilizando a função ‘graythresh’ sobre a
imagem. Segundo MATHWORKS (2018g), a função escolhe um limiar global a partir
de uma imagem em escala de cinza, normalizando-o para o intervalo [0 1]. Então, para
a imagem da Figura 39, o limiar calculado é 0,4353, o qual multiplicado por 255 (limite
superior da escala de cinza) corresponde a um limiar de 111 (indicado no histograma).
Sendo assim, após aplicação desse comando a imagem passa a ser do tipo
‘logical’, ou seja, é constituída somente por valores de 0 (preto), correspondente ao
fundo, representado visualmente pelo grupo de pixels situados à esquerda do limiar
no histograma da Figura 39 e branco (1), correspondente ao objeto (faixa contínua),
grupo de pixels situados à direita do limiar. O resultado do processo de limiarização
encontra-se ilustrado na Figura 40.
56

Figura 40 - ROI da pista binarizada com Método de Otsu.

Fonte: Autoria própria.

Na Figura 40, observam-se elementos desconexos oriundos da binarização


que correspondem aos tachões da pista. Como esses elementos não pertencem a
faixa contínua, deseja-se eliminá-los. Para isso utiliza-se da função ‘bwareaopen’, a
qual, conforme Mathworks (2018b), consiste em eliminar objetos pequenos de
imagens binárias.
Basicamente o algoritmo implícito determina os componentes conectados,
utilizando conceitos de vizinhanças e conectividade de pixels, calcula a área em pixel
dos mesmos e elimina os objetos com área menores do que a desejada. No caso da
aplicação ajustou-se um valor de 15 para a área, o qual foi obtido através de
verificações e testes, e corresponde aproximadamente a área dos tachões. Além
disso, estabeleceu-se Conectividade 8 (padrão do MATLAB) entre pixels vizinhos.
Com isso os tachões são eliminados da imagem binarizada. O resultado pode ser
observado na Figura 41.
57

Figura 41 - ROI da pista com elementos desconexos (tachões) eliminados.

Fonte: Autoria própria.

Em seguida, realiza-se um processo de suavização, visando eliminar o efeito


de serrilhado nas bordas das faixas contínuas, o qual pode ser observado na Figura
41. Para tanto, utiliza-se de um método morfológico denominado erosão binária
(GONZALEZ; WOODS, 2000), o qual, conforme já visto, permite reduzir os
componentes de uma imagem.
Inicialmente cria-se um elemento de estruturação morfológico, através da
função ‘strel’. Segundo Mathworks (2018p), ‘strel’ cria um objeto (matriz) de duas
dimensões, com valores verdadeiros (1) e falsos (0), onde o pixel central é chamado
de origem do elemento estruturante e identifica o pixel na imagem que está sendo
processada. Na operação morfológica somente os valores verdadeiros (1) do
elemento são utilizados. Na figura 42 tem-se um exemplo de estrutura do tipo linha
(‘line’), onde os parâmetros são: comprimento (LEN) e ângulo (DEG), em graus, em
relação ao eixo x positivo (direção anti-horária).

Figura 42 - Exemplos de elemento de estruturação do tipo 'line'. (a) LEN=9 e DEG=0. (b) LEN=3 e
DEG=45;

Fonte: Modificado de Mathworks, 2018b.


58

De maneira a alcançar o efeito de suavização desejada na aplicação


desenvolvida pelo presente trabalho, criou-se um elemento de estruturação do tipo
‘line’, seguindo o exemplo da Figura 42, especificando o comprimento do mesmo para
5, e o ângulo em 90º, aproximadamente a inclinação das linhas contínuas da Figura
41. Para fixar tal elemento de estruturação, realizou-se uma série de testes sobre a
imagem, os quais consistiam em alterar seus parâmetros de configuração e observar-
os efeitos pós-processamento.
O elemento estruturante utilizado pode ser observado na Figura 43.

Figura 43 - Elemento de estruturação criado para suavização das faixas.

Fonte: Autoria própria.

Com o elemento estruturante implementado pode-se realizar a operação de


erosão binária aplicando a função ‘imerode’ (MATHWORKS, 2018m) sobre a imagem
da Figura 41, obtendo a imagem da Figura 44. Nessa última, pode-se observar a
suavização das bordas em relação a Figura 41, o que facilita a operação de rotulação
dos objetos realizada em etapa posterior.

Figura 44 - Sinalização horizontal da pista livre suavizada com erosão binária.

Fonte: Autoria própria.


59

A próxima etapa do processamento consiste em rotular os objetos como forma


de identificar quantos objetos encontram-se na ROI e a partir disso determinar qual o
tipo de faixa está presente. Para tanto, utiliza-se da função ‘bwlabel’ que permite,
segundo Mathworks (2018d), rotular componentes conectados em uma imagem
binária. Essa função retorna uma matriz de rótulos, onde: os pixels rotulados como 0
são o plano de fundo; os pixels rotulados como 1 compõem um objeto; os pixels
rotulados como 2 compõem um segundo objeto e assim por diante.
Nesse contexto, foi utilizado o padrão de vizinhança (Conectividade 8), ou
seja, dois pixels adjacentes são parte de um mesmo objeto se ambos são conectados
ao longo da direção horizontal, vertical ou diagonal. Associado a isso, utilizou-se da
função ‘label2rgb’, através do qual a matriz de rótulos é convertida para um sistema
de cores RGB. Com isso, a cada objeto, e ao fundo, são atribuídas cores diferentes,
possibilitando a diferenciação dos objetos também visualmente (MATHWORKS,
2018n).
Em seguida utilizou-se da função ‘bwboundaries’, a qual, conforme Mathworks
(2018c), permite traçar os limites de região em uma imagem binária. O argumento de
entrada interpretado pela função considera pixels diferentes de zero como
pertencentes a um objeto e pixels com valor zero como constituintes do plano de
fundo, também como padrão de vizinhança do tipo Conectividade 8. Para tanto, utiliza-
se a imagem da Figura 44, e os valores obtidos são armazenados em duas variáveis,
B e L.
A variável B, trata-se de uma matriz do tipo ‘cell’, a qual armazena outras duas
matrizes internamente para o caso analisado. Esse número de matrizes internas
depende do número de elementos encontrados na região armazenada. Quanto às
matrizes internas, estas possuem as posições limites dos pixels dos objetos
encontrados (MATHWORKS, 2018f). Com essas informações, pode-se traçar o
contorno dos objetos. Para tanto utilizou-se da função ‘boundary’ (MATHWORKS,
2018a), interligando os pontos limites e marcando assim a fronteira dos objetos.
A variável L armazena a matriz de rótulos dos objetos, desempenhando
função semelhante a ‘bwlabel’ descrita anteriormente.
A partir disso efetua-se o cálculo das propriedades dos objetos encontrados,
como área, perímetro, e também com isso, verifica-se a quantidade de objetos,
plotando em seguida todas as informações de forma a verificar visualmente essas
operações (Figura 45).
60

Figura 45 - Rotulação e total de objetos encontrados na ROI da pista.

Fonte: Autoria própria.

Pode-se visualizar na Figura 45 que foram encontrados 2 objetos, os quais


são representados por cores diferentes e demarcados com uma linha de coloração
preta, efetivando o funcionando das operações realizadas também visualmente.
Com esse número de objetos, estabeleceu-se que caso fossem encontrados
até 2 objetos, trata-se da presença de linha contínua e, portanto, a ultrapassagem não
é permitida. Nesse caso o algoritmo apresenta novamente a imagem lida, indicando
na tela que a faixa contínua foi detectada - ultrapassagem proibida (Figura 46) e
desempenha uma segunda etapa de forma a monitorar uma eventual situação de
descontinuidade.

Figura 46 - Indicação de presença de linha contínua na imagem adquirida.

Fonte: Autoria própria.


61

Caso contrário, com mais de 2 objetos, trata-se de linha tracejada/seccionada,


portanto a ultrapassagem é permitida.

4.1.2 Análise considerando a presença de faixa tracejada/seccionada

Seguindo os mesmos procedimentos da seção anterior o algoritmo realiza a


leitura e apresenta a imagem, conforme pode-se visualizar na Figura 47. Observa-se
nesse caso que se trata de uma imagem de pista de mão dupla sem trânsito (pista
livre) e com sinalização do tipo faixa tracejada amarela.

Figura 47 - Imagem adquirida da pista de mão dupla.

Fonte: Autoria própria.

Em seguida tem-se a conversão para escala de cinza, realizada com os


mesmos parâmetros da seção anterior, tendo em vista que o algoritmo realiza os
mesmos procedimentos nessa primeira etapa, independente da imagem a ser
analisada. Com isso tem-se a representação ilustrada na Figura 48.

Figura 48 - Imagem da pista de mão dupla e respectivo histograma.

Fonte: Autoria própria.


62

A partir disso tem-se o ajuste do brilho, originando a Figura 49.

Figura 49 - Imagem da pista de mão dupla com brilho ajustado.

Fonte: Autoria própria.

Após, o algoritmo realiza o ajuste do contraste, gerando uma nova imagem


(Figura 50), onde pode-se observar que a faixa que divide os fluxos opostos da pista
se torna mais evidente em comparação com a da Figura 49.

Figura 50 - Imagem da pista de mão dupla com contraste ajustado.

ROI

Fonte: Autoria própria.

Dando seguimento, tem-se o processo de seleção da ROI (indicação em


verde na Figura 50) da imagem. O resultado, exibido na Figura 51, demonstra a
presença de duas regiões de concentração de pixels, assim como na análise efetuada
na seção anterior. Desse modo o processo de binarização pode ser realizado de
maneira satisfatória, a partir de um valor de limiar global.
63

Figura 51 - Seleção da região de interesse da pista de mão dupla e respectivo histograma.

108

Fonte: Autoria própria.

O limiar, obtido a partir da aplicação do Método de Otsu, foi de 0,4235, o qual


multiplicado por 255 (limite superior da escala de cinza) corresponde a um limiar de
108 (indicado no histograma da Figura 51). Com isso o processo de binarização
retorna a imagem ilustrada na Figura 52.

Figura 52 - ROI da pista de mão dupla binarizada com Método de Otsu.

Fonte: Autoria própria.

Em seguida objetos pequenos, tratados na análise da seção anterior como


oriundos dos tachões da pista são eliminados, mas nesse caso, como eles não
existem, a aplicação da função ‘bwareaopen’ sobre a imagem elimina eventuais
pontos desconexos, que podem ser interpretados como ruídos e podem vir a
prejudicar processamentos posteriores. O resultado é apresentado na Figura 53.
64

Figura 53 - ROI da pista de mão dupla com objetos desconexos eliminados.

Fonte: Autoria própria.

Observando-se área superior da Figura 53 e comparando-a com a Figura 52


observa-se que o processo acabou eliminando um ponto pertencente a linha
tracejada, visto que ele possui área menor do que a estabelecida, que foi de 15 pixels.
Porém, esse detalhe não vem a prejudicar o correto funcionamento da aplicação.
Adicionalmente realiza-se o processo de suavização da faixa seguindo os
mesmos parâmetros de erosão binária aplicados na análise com presença de faixa
contínua. Nesse caso, e conforme pode-se observar no resultado, ilustrado pela
Figura 54, tem-se evidenciado uma diminuição dos componentes (trechos da faixa).
Porém, assim como no processo de eliminação de elementos desconexos, essa
diminuição não prejudica os processamentos seguintes.

Figura 54 - Sinalização da pista suavizada com erosão binária.

Fonte: Autores.
65

Dando seguimento são realizados os processos de identificação dos objetos


na ROI, os quais são rotulados e apresentados (Figura 55), como forma de verificar
visualmente as operações realizadas.

Figura 55 - Rotulação e número de objetos encontrados na ROI da pista de mão dupla.

Fonte: Autoria própria.

Como foram encontrados 4 objetos na região analisada o algoritmo conclui


que se trata da presença de linha tracejada, e, portanto, a ultrapassagem é permitida
no trecho analisado. O algoritmo então apresenta novamente a imagem adquirida
Figura 56, indicando que a ultrapassagem é permitida.

Figura 56 - Indicação de linha tracejada - ultrapassagem permitida.

Fonte: Autoria própria.


66

4.2 DETECÇÃO DA DESCONTINUIDADE DE FAIXA

A partir da detecção de tipo de faixa como contínua, o algoritmo realiza uma


segunda etapa, visando determinar se algum objeto se sobrepõe ou não à faixa
central, caracterizando, no caso do objeto se tratar de um veículo, uma ultrapassagem
irregular.
Inicialmente, a partir da imagem obtida no processo anterior, tem-se um
mapeamento dos pontos que correspondem à faixa contínua. Esse processo é
realizado fazendo-se a varredura da imagem binarizada, através de laços de
repetição, e armazenando os pixels com valores verdadeiros (1 – cor branca), os quais
correspondem à faixa contínua.
Com isso, têm-se gravadas as posições dos pixels que compõem a faixa
contínua em dois vetores: ‘x_coluna’, o qual armazena o número da coluna em que o
elemento se localiza na matriz, e ‘y_linha’, o qual armazena o número da linha
correspondente ao elemento. Sendo assim, pode-se acessar esses elementos
posteriormente, varrendo uma nova imagem e comparando-a com a imagem anterior.
Caso as informações da nova imagem, nos pontos onde se localiza a faixa contínua
no trecho analisado pela aplicação, correspondam à condição de igualdade com a
imagem anterior, tem-se uma situação de normalidade, ou seja, sem a ocorrência de
descontinuidades de faixa. Caso houverem alterações, o algoritmo é capaz de
determinar em que ponto da imagem ocorreu a descontinuidade, partindo para uma
terceira etapa de análise, a qual visa determinar se o objeto se trata de um veículo ou
não.

4.2.1 Análise considerando condição de normalidade (sem descontinuidade)

A partir da detecção do tipo de faixa como contínua, faz-se a análise de


descontinuidade, visando detectar ultrapassagens irregulares no trecho analisado.
Para tanto, realiza-se a leitura de uma nova imagem, e apresenta-se o resultado,
conforme ilustrado pela Figura 57, onde pode-se notar um veículo trafegando
normalmente na pista.
67

Figura 57 - Nova imagem adquirida da pista de mão dupla.

Fonte: Autoria própria.

O algoritmo então converte a imagem para escala de cinza, realiza o ajuste


do brilho e do contraste, seleciona a ROI, binariza a imagem, elimina elementos
desconexos e suaviza o objeto (faixa contínua), utilizando-se dos mesmos parâmetros
apresentados na seção 4.1.1 (análise faixa contínua). Isto é necessário pois como se
deseja realizar a comparação da imagem anterior, com processamento descrito na
seção 4.1.1, com a nova imagem, qualquer alteração nos processos pode gerar
mudanças na forma e reconhecimento dos objetos, o que impossibilita a correta
comparação dos elementos que determinam a condição de descontinuidade.
Nesse sentido os parâmetros de processamento são os mesmos para ambas
as imagens, isto é, de pista livre e da nova imagem a ser comparada. Sendo assim, e
considerando que se está analisando uma situação de normalidade (sem
descontinuidade), os resultados obtidos após as tarefas de processamento na nova
imagem são semelhantes aos obtidos na seção 4.1.1 e podem ser observados nas
Figuras 58 e 59.

Figura 58 - Resultados obtidos após tarefas iniciais sobre Figura 57. (a) Conversão para escala de
cinza; (b) Ajuste de brilho sobre (a); (c) Ajuste de contraste sobre (b).

ROI

Fonte: Autoria própria.


68

Figura 59 - Resultados obtidos após processamento sobre Figura 58-c. (a) Seleção da ROI; (b)
Binarização sobre (a); (c) Eliminação de objetos desconexos sobre (b); (d) Erosão binária sobre (c).

Fonte: Autoria própria.

A única diferença situa-se no fato de que é realizado um processo de dilatação


binária, após a suavização da mesma, na nova imagem. Com isso preserva-se o
formato da faixa contínua e pode-se realizar o processo de comparação de forma
adequada.
Quanto ao processo de dilatação, esse se realiza através da função ‘imdilate’,
a qual, segundo (MATHWORKS, 2018l), permite expandir componentes de uma
imagem. Para realizar tal operação, associou-se dois elementos de estruturação, ‘se0’
e ‘se90’. O primeiro, denominado ‘se0’, trata-se de um elemento de estruturação do
tipo ‘line’, com comprimento de 5 pixels e ângulo de 0º de inclinação. O segundo,
‘se90’, trata-se também de um elemento de estruturação do tipo ‘line’ porém, com
comprimento de 9 pixels e ângulo de 90º (Figura 60).

Figura 60 - Elementos de estruturação utilizados na dilatação binária.

Fonte: Autoria própria.

Na Figura 61 pode-se observar o resultado da operação de dilatação sobre a


Figura 59(d).
69

Figura 61 - ROI da nova imagem após processo de dilatação binária sobre Figura 59(d).

Fonte: Autoria própria.

Após esse processamento, tem-se finalmente a tarefa de comparação.


Basicamente é feita uma varredura na imagem (Figura 61) através de laços de
repetição e indexação de matrizes, verificando os pontos pertencentes à faixa,
armazenados pelo mapeamento descrito no início dessa seção, de forma a determinar
se alteraram seus valores. Como inicialmente esses pontos tem valor 1 (pixel branco),
uma mudança para 0 (preto) significa que houveram alterações. Nesse caso os pontos
iniciais e finais são armazenados, possibilitando isolar o objeto que causou a
descontinuidade. Caso não houverem alterações, como é o caso da imagem da Figura
57, o algoritmo apresenta condição de normalidade (Figura 62), ou seja, sem
ultrapassagens detectadas.

Figura 62 - Indicação de condição normal (sem ultrapassagens detectadas).

Fonte: Autoria própria.


70

4.2.2 Análise considerando presença de descontinuidade de faixa

Nesse caso a nova imagem lida pelo programa, logo após a detecção de faixa
como tipo contínua, é a ilustrada na Figura 63. Nela, pode-se observar a presença de
um veículo, posicionado sobre a faixa contínua, realizando uma manobra de
ultrapassagem irregular.

Figura 63 - Nova imagem da pista com situação de descontinuidade de faixa.

Fonte: Autoria própria.

Após realizada a leitura, o programa efetua a rotina de conversão para escala


de cinza seguindo os mesmos parâmetros utilizados na seção 4.1.1 (análise faixa
contínua). O resultado pode ser visualizado na Figura 64.

Figura 64 - Conversão para escala de cinza.

ROI

Fonte: Autoria própria.

Em seguida são realizados os processos de ajuste de brilho, conforme Figura


65(a), ajuste de contraste e seleção da região de interesse (Figura 65(b)).
71

Figura 65 - (a) Ajuste de brilho sobre Fig.64; (b) Ajuste de contraste sobre (a).

(a) (b) ROI

Fonte: Autoria própria.

A partir disso tem-se a execução dos processos de Limiarização, eliminação


de objetos desconexos, suavização e dilatação dos objetos encontrados. Os
resultados encontram-se ilustrados na Figura 66.

Figura 66 - (a) Seleção da ROI sobre Fig. 65-b; (b) Binarização utilizando Método de Otsu sobre (a);
(c) Eliminação de objetos desconexos sobre (b); (d) Erosão binária sobre (c).

Fonte: Autoria própria.

Na Figura 67, tem-se o processo de dilatação binária realizado sobre a


imagem ilustrada na Figura 66(d).

Figura 67 - Resultado da dilatação binaria realizado sobre Figura 66-d.

Fonte: Autoria própria.


72

Sobre a imagem da Figura 67, o algoritmo realiza a comparação, visando


pontos de mudança dos pixels na faixa continua. Como nesse caso, houveram
mudanças, devido a presença do objeto (veículo) sobre a faixa, tem-se também a
informação dos pontos onde o objeto cortou a linha. Os pontos limites verticais, onde
foram detectadas alterações de pixels, tanto superior quanto inferior, servem de base
para isolar o objeto. Para o caso da análise, os pontos de corte da linha podem ser
visualizados na Figura 68.

Figura 68 - Retorno dos pontos onde a descontinuidade foi detectada.

Fonte: Autoria própria.

Nesse caso, o algoritmo utiliza essas informações, e através de indexação de


matrizes isola a ROI a partir da imagem de escala de cinza da nova imagem onde se
encontra o objeto, conforme indicação em amarelo na Figura 64. O resultado pode ser
visualizado na Figura 69.

Figura 69 - ROI do objeto que causou a descontinuidade.

Fonte: Autoria própria.

Em seguida, sobre a imagem representada na Figura 69, realiza-se o ajuste


do brilho e do contraste, visando destacar o objeto (veiculo), na região selecionada.
Para isso, utiliza-se da função ‘imadjust’, (MATHWORKS, 2018h) dada pela sintaxe
‘J=imadjust(I,[low_in high_in],[low_out high_out])’. Os valores de ‘low_in’ e ‘high_in’
especificam os limites de contraste na imagem em tons de cinza da entrada, e devem
estar no intervalo [0 1], sendo que ‘low_in’ deve ser menor do que ‘high_in’. Os valores
de ‘low_out’ e ‘high_out’, caso omitidos, são padronizados para o intervalo [0 1].
Nesse sentido, após testes realizados, ajustando-se os valores de ‘low_in’
para 0.3 e ‘high_in’ para 0.7, com ‘low_out’ e ‘high_out’ estabelecidos em 0 e 1,
73

respectivamente, obteve-se o resultado desejado, destacando o objeto em relação ao


fundo, conforme pode-se visualizar na Figura 70.

Figura 70 - ROI do objeto com contraste aprimorado e respectivo histograma.

124

Fonte: Autoria própria.

As próximas tarefas compreendem binarizar a imagem e realizar processos


de morfologia matemática, de forma a tornar a área ocupada pelo veículo na imagem
mais homogênea, facilitando o posterior cálculo da área do objeto. Para isso e
conforme indicação no histograma da Figura 70, inicialmente atribui-se um valor de
limiar igual a 124. Esse valor foi obtido após uma série de testes, os quais
compreendiam alterar esse parâmetro e observar os resultados nas tarefas
posteriores de morfologia. Através dele, efetuou-se a binarização, obtendo o resultado
ilustrado na Figura 71.

Figura 71 - ROI do objeto binarizada.

Fonte: Autoria própria.

Em seguida, observam-se na Figura 71 pontos brancos nas regiões superior


esquerda e superior direita da imagem. Tratam-se de elementos que não pertencem
ao veículo, e, portanto, devem ser eliminados para não entrarem posteriormente no
74

cálculo da área do mesmo. A eliminação desses pontos é realizada através da função


‘bwareaopen’, fixando o parâmetro de área desejada em 25 pixels, valor
aproximadamente correspondente aos objetos não pertencentes ao veículo, obtido a
partir de verificação visual, testes e simulações.
Pode-se observar também na Figura 71 a presença de áreas escuras dentro
da área que compõe o veículo, as quais também prejudicam o posterior cálculo da
área do objeto. Esse problema é praticamente eliminado utilizando-se da dilatação
binária com dois elementos de estruturação do tipo ‘line’, sendo um deles com
comprimento de 7 pixels e ângulo de 90º (se_90) e outro de comprimento de 5 pixels
com ângulo 0 (se_0), ambos representados pela Figura 72.

Figura 72 - Elementos de estruturação utilizados na dilatação do objeto encontrado.

Fonte: Autoria própria.

Os resultados, tanto do processo de eliminação de pontos desconexos como


da dilatação binária, são ilustrados na Figura 73.

Figura 73 - (a) ROI do objeto com elementos desconexos eliminados; (b) Dilatação binária sobre (a).

Fonte: Autoria própria.

Em seguida são realizados mais dois processos visando homogeneizar ainda


mais a área do objeto. Inicialmente é realizada uma operação de fechamento binária
sobre a imagem da Figura 73-b, utilizando-se o comando ‘imclose’, (MATHWORKS,
2018k) parametrizado com um elemento estruturante do tipo disco (‘disk’), com raio
igual a 4 pixels (Figura 74-a).
75

Posteriormente realiza-se uma operação de erosão binária (suavização)


visando minimizar os efeitos de dilatação anterior nas bordas do objeto. Para isso,
utiliza-se o comando ‘imerode’, parametrizado com um elemento de estruturação tipo
diamante (‘diamond’), com raio igual a 2 (Figura 74-b).

Figura 74 – (a) Elemento de estruturação do tipo 'disk' utilizado no fechamento binário; (b) Elemento
de estruturação do tipo ‘diamond’ utilizado na erosão binária.

Fonte: Autoria própria.

Os resultados das duas operações podem ser visualizados na Figura 75.

Figura 75 – (a) Resultado de fechamento binário sobre Figura (73-b); (b) Erosão binária sobre (a).

Fonte: Autoria própria.

A partir da imagem da Figura 75-b, o algoritmo realiza os processos de


rotulação, delimitação e marcação das fronteiras do objeto, assim como efetua o
cálculo da área e centroide do mesmo e apresenta o resultado (Figura 76),
possibilitando a visualização das operações.
76

Figura 76 - Apresentação da área e demais atributos do objeto encontrado.

Fonte: Autoria própria.

Com a informação do perímetro, obtido de maneira alternativa através da


função ‘bwperim’, (MATHWORKS, 2018e), plotam-se as fronteiras sobre a imagem
em escala de cinza do objeto isolado, comprovando que a área calculada corresponde
à área do veículo na imagem. Realiza-se também um processo de reconstrução da
imagem, recolocando o objeto isolado delineado sobre a imagem adquirida
inicialmente logo após a sua conversão em escala de cinza.
Nesse ponto, cria-se um critério, estabelecendo que objetos com área maior
do que 10.000 pixels correspondem a veículos. Como o objeto analisado obteve um
valor de área igual a 13633, atende a esse critério, e, portanto, tem-se nesse caso
uma condição de ultrapassagem irregular. O algoritmo então apresenta na tela essa
informação (Figura 77), na qual o objeto detectado encontra-se delineado.

Figura 77 - Condição de ultrapassagem irregular detectada.

Fonte: Autoria própria.


77

4.3 ANÁLISE DOS RESULTADOS

Nas seções anteriores apresentou-se o funcionamento do algoritmo,


evidenciando as tarefas sequenciadas de processamento e análise realizadas nas
diversas situações do ambiente de aplicação da ferramenta de detecção.
Um ponto crucial a ser observado na criação desse tipo de ferramenta, e que
ficou destacado durante o desenvolvimento, é de que qualquer modificação em uma
tarefa de processamento no início pode alterar profundamente os resultados finais.
Dessa forma, fica evidente que as técnicas de transformação de imagem são
extremamente dependentes.
Nesse contexto, soma-se o fato de que, para uma determinada etapa, existem
diversos métodos, inclusive com variações dentro de um mesmo método. Por isso,
para chegar-se ao algoritmo final, foram analisadas e simuladas diversas técnicas e
os resultados de suas interações, resultando na configuração apresentada nas seções
anteriores (4.1 e 4.2).
Recapitulando, na seção 4.1 tem-se apresentada a técnica idealizada para
detectar o tipo de sinalização horizontal. Como esse é o fator que determina se a
ultrapassagem é permitida ou não, o foco inicial da ferramenta situa-se nesse ponto.
Basicamente, após a conversão para escala de cinza, e do ajuste do brilho e do
contraste da imagem da pista, atua o processo de segmentação, discriminando os
objetos da imagem. Pode-se então verificar a quantidade de objetos (faixas) na
imagem e, com isso, determinar o tipo de faixa (contínua ou tracejada). Nesse caso o
objetivo final dessa etapa foi atingido no momento em que a ferramenta pode
reconhecer as faixas e classificá-las corretamente.
Na seção 4.2 a técnica de detecção de descontinuidade implementada é
apresentada. Nessa etapa, a partir da imagem resultante do processamento anterior
o algoritmo realiza um mapeamento dos pontos que pertencem a faixa contínua,
armazenando a informação da posição espacial (localização x, y) destes. Após a
leitura de uma nova imagem, o algoritmo pode então comparar essa, já processada,
com a imagem anterior e verificar se houveram alterações nesses pontos,
caracterizando ou não uma descontinuidade de faixa. Nesse ponto, pode-se constatar,
ao analisar condições normais de trânsito e de ultrapassagem, conforme relatado, que
o objetivo foi atingido, isto é, o algoritmo pode reconhecer essas situações.
78

Ainda na seção 4.2 também é apresentado o método elaborado para verificar


se o objeto que se sobrepôs a faixa é um veículo. Para tanto utilizando-se novamente
do processo de segmentação fundamentalmente, associado a tarefas de morfologia,
pode-se homogeneizar a área do objeto que se sobrepôs à faixa. Com isso,
estabelecendo um valor de área que corresponde a um veículo foi possível analisar
se um determinado objeto se classifica como tal. Por fim, pode-se constatar também
que a ferramenta desenvolvida atende ao objetivo de detecção veicular a partir de
uma imagem.
79

5 CONSIDERAÇÕES FINAIS

O trabalho desenvolvido foi motivado a partir do interesse em entender como


os sistemas de reconhecimento de imagens funcionam, mais especificamente, como
um computador pode ser programado para reconhecer formas, padrões e assim
desempenhar funções semelhantes às executadas por humanos.
Conforme visto, manobras de ultrapassagem irregular são responsáveis por
um grande número de acidentes fatais atualmente no trânsito, porém a fiscalização é
insuficiente em virtude da falta de recursos e de agentes de trânsito.
Nesse sentido e diante dessa necessidade de aumento de fiscalização, o
tema proposto pelo presente trabalho recaiu sobre imagens de monitoramento de
trânsito e a possibilidade de fazer uma pesquisa voltada a realizar a detecção
automática de veículos e ultrapassagens irregulares.
Para tanto, foi necessária uma ampla pesquisa na literatura de processamento
e análise de imagens, assim como de trabalhos similares já desenvolvidos, resultando
num grande avanço pessoal sobre os conhecimentos dessa área.
O objeto criado pelo presente estudo trata-se de um algoritmo, uma
ferramenta de software que pode ser utilizada diretamente em uma aplicação de
fiscalização de ultrapassagens irregulares ou então adaptada e aprimorada conforme
necessidade.
No caso da aplicação da ferramenta na fiscalização de trânsito, tal sistema
elimina a necessidade de agentes para identificar infrações de ultrapassagens
irregulares. Além disso, a partir de uma análise de trechos de maior risco ou incidência
de acidentes desse gênero, pode-se instalar tal dispositivo com o objetivo de reduzir
esses índices, contribuindo para um trânsito mais seguro.
Com o desenvolvimento do presente estudo, pode-se compreender conceitos
sobre formação, aquisição, representação de imagens, entre outros, assim como foi
possível esclarecer formas de manipular as informações de uma imagem de maneira
a obter atributos e tomar decisões a partir disso. Esses fatores se fazem de grande
valia, no momento em que podem ser aplicados nas mais diversas áreas tecnológicas.
Diversos conhecimentos adquiridos durante o curso de Engenharia Elétrica,
como programação, cálculo, matrizes e vetores, visão robótica, entre outros, puderam
ser retomados e unificados, sendo de fundamental importância para atingir os
objetivos propostos.
80

A área de PADI é muito vasta e inúmeras são as técnicas de transformação e


análise. Devido a isso, as aplicações desenvolvidas acabam por se tornar bastante
específicas, isto é, atuam somente na resolução das tarefas a qual foram designadas.
Além disso, conforme constatado durante a pesquisa, aplicações desenvolvidas em
monitoramento de trânsito com objetivo similar ao proposto pelo presente trabalho são
praticamente inexistentes e omitem o algoritmo utilizado, o que dificulta o
desenvolvimento de novas aplicações.
Nesse sentido, faz-se de grande importância o estudo apresentado, no
momento em que torna explicito seu código fonte (Anexo II), assim como a análise
sequencial de seu funcionamento. A partir dele, torna-se pública uma aplicação pouco
explorada, facilitando o desenvolvimento de novas tecnologias no setor de
monitoramento de tráfego de veículos.

5.1 TRABALHOS FUTUROS

O desenvolvimento do presente trabalho evidenciou a aplicação de técnicas


de processamento e análise sobre imagens já existentes e analisadas
individualmente, de forma a criar métodos de detecção e reconhecimento de faixas e
veículos. Em uma futura aplicação prática da ferramenta, deve-se inicialmente ajustar
os métodos implementados para análise em vídeo, possibilitando o monitoramento
em tempo real.
Nesse sentido, a exemplo de Montanari (2015), pode-se implementar uma
tarefa de seleção de quadros, com a finalidade de analisar os 60 quadros por segundo
gerados pela câmera de captura de vídeo por exemplo. Com isso, pode-se então
determinar qual quadro possui informação mais relevantes dentro do conjunto, e a
partir dele realizar o processamento, propiciando rapidez ao sistema. Sob outra
perspectiva, as imagens obtidas podem ser processadas e analisadas em tempo
posterior.
De forma a tornar a ferramenta ainda mais funcional e confiável, métodos já
existentes podem ser aprofundados e outros podem ser adicionados. Por exemplo, o
desenvolvimento de um método de enquadramento automático, ajustando a ROI
conforme a resolução da imagem obtida pode vir a tornar a ferramenta mais
independente de ajustes no código.
81

Pode-se aprimorar também o processo de ajuste de brilho e contraste,


analisando a influência da iluminação do ambiente, como a variação da incidência de
luz solar sobre o campo de visão da câmera, estabelecendo funções de ajuste
automático. Nesse contexto, a sombra projetada por veículos ou de nuvens sobre a
pista também pode ser analisada e o uso de métodos de discriminação e extração de
sombras, como o utilizado em Santos (2014), pode ser viabilizado.
Outro ponto consiste em associar um método de detecção automática de
placas. Conforme visto, a ferramenta implementada armazena a imagem ao detectar
uma ultrapassagem irregular e tendo em vista que já se tem a localização do veículo
na imagem, pode-se segmentar esse objeto identificando a numeração da placa. Com
esse dado pode-se realizar de forma automática a aplicação da penalidade ao veículo
infrator.
Métodos de análise de trajetória, utilizando como base o centro geométrico do
veículo, juntamente com técnicas de aprendizagem de máquina, através do uso de
redes neurais artificiais, como o apresentado em Santos (2014), também podem ser
viabilizados. Enfim, tendo como base a configuração já desenvolvida, e suas
melhorias, evidencia-se o potencial de aplicação da ferramenta no monitoramento do
trânsito, principalmente como elemento de fiscalização.
82

REFERÊNCIAS

ALBUQUERQUE, Márcio Portes de et al. Análise de Imagens e Visão


Computacional. Anais da V Escola do CBPF. 1ed. Rio de Janeiro, 2004. Disponível
em: < http://www.cbpf.br/~mpa/G7-marcio.pdf> Acesso em 08/05/2018.

BRASIL. Lei 9503 de 23 de setembro de 1997. Institui o Código de Trânsito


Brasileiro. Disponível em:
http://www.planalto.gov.br/Ccivil_03/leis/L9503Compilado.htm. Acesso em:
26/03/2018.

BRASIL. Ministério das Cidades. Conselho Nacional de Trânsito (CONTRAN).


Resolução 471 de 18 de dezembro de 2013. Regulamenta a fiscalização de
trânsito por intermédio de videomonitoramento em estradas e rodovias, nos
termos do § 2º do artigo 280 do Código de Trânsito Brasileiro. Disponível em:
<http://www.denatran.gov.br/download/Resolucoes/Resolucao4712013.pdf> Acesso
em: 26/03/2018.

BRASIL. Ministério do Planejamento. Desenvolvimento de Gestão. Instituto de


Pesquisa Econômica Aplicada (IPEA). Acidentes de Trânsito nas Rodovias
Federais Brasileiras. Relatório de Pesquisa. Brasília, 2015. Disponível em:
<https://www.icict.fiocruz.br/sites/www.icict.fiocruz.br/files/IPEA%202015_relatorio_a
cidentes_transito.pdf> Acesso em: 27/03/2018.

BRASIL. Portal do Estado da Paraíba. DER sinaliza rodovia Conde/Jacumã e


oferece mais segurança aos usuários durante carnaval. 8 de fevereiro de 2018.
Disponível em: < http://paraiba.pb.gov.br/der-sinaliza-rodovia-condejacuma-e-
oferece-mais-seguranca-aos-usuarios-durante-carnaval/> Acesso em:

CHAIA, Aline Villela; DAIBERT, Maria Ribeiro; Mini Curso: Introdução ao


MATLAB. UFJF, Minas Gerais, 2013. Disponível em: <
http://www.ufjf.br/getproducao/files/2013/05/Apostila-Mini-Curso-MATLAB-GET-
EP1.pdf> Acesso em 16/05/2018.

CNT- Confederação Nacional do Transporte; SEST - Serviço Social do Transporte;


SENAT - Serviço Nacional de Aprendizagem do Transporte. Pesquisa CNT de
Rodovias 2017: relatório gerencial. Brasília, 2017. 403 p. Disponível em:
<http://pesquisarodoviascms.cnt.org.br//Relatorio%20Geral/Pesquisa%20CNT%20(2
017)%20-%20BAIXA.pdf> Acesso em: 27/03/2018.

CONTESINI, Leonardo. Congresso aprova projeto de lei que aumenta punição


para ultratrapassagens perigosas e rachas. [S.l.], 16 de abril de 2014. Disponível
em: < https://www.flatout.com.br/congresso-aprova-projeto-de-lei-que-aumenta-
punicao-para-ultrapassagens-perigosas-e-rachas/> Acesso em: 27/03/2018.

CONTESINI, Leonardo. Por que precisamos humanizar a fiscalização de


trânsito. [S.l.], 4 de novembro de 2015. Disponível em:
83

<https://www.flatout.com.br/por-que-precisamos-humanizar-a-fiscalizacao-de-
transito/> Acesso em: 27/03/2018.

DA SILVA, Andressa Boger. Detecção de descontinuidade de faixa através do


processamento de imagens. 2017. Trabalho de Conclusão de Curso. Curso de
Engenharia Elétrica, Universidade Regional do Noroeste do Estado do Rio Grande do
Sul – UNIJUÍ, Ijuí, 2017.

GATTAS, Marcelo, Imagem Digital. 17 de setembro de 2015. Disponível em:


<http://webserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf>
Acesso em 14/05/2018.

GIL, Antônio Carlos. Como elaborar projetos de pesquisa. 4 ed. São Paulo: Atlas,
2002.

GIL, Antônio Carlos. Métodos e técnicas de pesquisa social. 6 ed. São Paulo:
Atlas, 2008.

GOMES, Herman Martins; QUEIROZ, José Eustáquio Rangel de Queiroz.


Introdução ao processamento digital de imagens. Departamento de Sistemas e
Computação, UFCG. Campina Grande, Paraíba, 2001. Disponível em:
<http://www.dsc.ufcg.edu.br/~hmg/disciplinas/graduacao/vc-2014.1/Rita-Tutorial-
PDI.pdf> Acesso em 16/08/2018.

GOMES, Otávio da Fonseca Martins. Microscopia Co-Localizada: Novas


Possibilidades na Caracterização de Minérios. Tese (Doutorado em Ciência dos
Materiais e Metalurgia) – Pontifícia Universidade Católica do Rio de Janeiro, Rio de
Janeiro, 2007. Disponível em: < https://www.maxwell.vrac.puc-
rio.br/Busca_etds.php?strSecao=resultado&nrSeq=11498@1> Acesso em
07/05/2018.

GONZALEZ, Rafael C.; WOODS, Richard E. Processamento de Imagens Digitais.


São Paulo: Edgard Blucher LTDA, 2000.

GONZALEZ, Rafael C.; WOODS, Richard E. Processamento Digital de Imagens. 3


ed. São Paulo: Pearson Prentice Hall, 2010.

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


Imagens. Rio de Janeiro, Brasport, 1999. Disponível em: <
http://www.ogemarques.com/wp-content/uploads/2014/11/pdi99.pdf> Acesso em
14/05/2018.

MATHWORKS, MATLAB(a). boundary - Boundary of a set of points in 2-D or 3-D.


2018. Disponível em: <https://www.mathworks.com/help/matlab/ref/boundary.html>
Acesso em: 30/08/2018.
84

MATHWORKS, MATLAB(b). bwareaopen - Remove small objects from binary


image. 2018. Disponível em:
<https://www.mathworks.com/help/images/ref/bwareaopen.html> Acesso em:
05/09/2018.

MATHWORKS, MATLAB(c). bwboundaries - Trace region boundaries in binary


image. 2018. Disponível em:
<https://www.mathworks.com/help/images/ref/bwboundaries.html> Acesso em:
05/09/2018.

MATHWORKS, MATLAB(d). bwlabel - Label connected components in 2-D binary


image. 2018. Disponível em:
<https://www.mathworks.com/help/images/ref/bwlabel.html> Acesso em: 02/09/2018.

MATHWORKS, MATLAB(e). bwperim - Find perimeter of objects in binary image.


2018. Disponível em: <https://www.mathworks.com/help/images/ref/bwperim.html>
Acesso em: 13/12/2018.

MATHWORKS, MATLAB(f). cell - Cell array. 2018. Disponível em:


<https://www.mathworks.com/help/matlab/ref/cell.html> Acesso em: 18/08/2018.

MATHWORKS, MATLAB(g). graythresh - Global image threshold using Otsu's


method. 2018. Disponível em:
<https://www.mathworks.com/help/images/ref/graythresh.html> Acesso em:
18/08/2018.

MATHWORKS, MATLAB(h). imadjust - Adjust image intensity values or colormap.


2018. Disponível em: <https://www.mathworks.com/help/images/ref/imadjust.html>
Acesso em: 18/08/2018

MATHWORKS, MATLAB(i). Image Processing and Computer Vision. 2018.


Disponível em: <https://www.mathworks.com/solutions/image-video-
processing/video-processing.html> Acesso em 16/05/2018.

MATHWORKS, MATLAB(j). Image Processing Toolbox. 2018. Disponível em:


<https://www.mathworks.com/help/images/index.html> Acesso em 16/05/2018.

MATHWORKS, MATLAB(k). imclose - Morphologically close image. 2018.


Disponível em: <https://www.mathworks.com/help/images/ref/imclose.html> Acesso
em: 03/10/2018.

MATHWORKS, MATLAB(l). imdilate - Dilate image. 2018. Disponível em:


<https://www.mathworks.com/help/images/ref/imdilate.html> Acesso em: 03/10/2018

MATHWORKS, MATLAB(m). imerode - Erode image. 2018. Disponível em:


<https://www.mathworks.com/help/images/ref/imerode.html> Acesso em: 03/10/2018
85

MATHWORKS, MATLAB(n). label2rgb - Convert label matrix into RGB image. 2018.
Disponível em: <https://www.mathworks.com/help/images/ref/label2rgb.html> Acesso
em: 25/09/2018.

MATHWORKS, MATLAB(o). rgb2gray - Convert RGB image or colormap to


grayscale. 2018. Disponível em:
<https://www.mathworks.com/help/matlab/ref/rgb2gray.html> Acesso em:
18/08/2018.

MATHWORKS, MATLAB(p). strel - Morphological structuring element. 2018.


Disponível em: <https://www.mathworks.com/help/images/ref/strel.html> Acesso em:
18/08/2018.

MATIAS, Ítalo de Oliveira. O uso do algoritmo genético em segmentação de


imagens digitais. 2007. 89 f. Tese (Doutorado em Ciências de Engenharia Civil) –
Universidade Federal do Rio de Janeiro, Rio de Janeiro, 2007. Orientador: Alexandre
Gonçalves Evsukoff e Nelson Francisco Favilla Ebecken. Disponível em: <
http://www.coc.ufrj.br/en/documents2/doutorado/2007-2/898-italo-de-oliveira-matias-
doutorado/file> Acesso em 11/05/2018.

MEDEIROS, Diego da Silva de. Curso Matlab aplicado ao processamento de


imagens. 2014. Instituto Federal de Santa Catarina, Câmpus São José. Disponível
em: <
https://wiki.sj.ifsc.edu.br/wiki/index.php/Curso_Matlab_aplicado_ao_processamento_
de_imagens> Acesso em: 03/06/2018.

MING, Sun Hsien. Fiscalização Eletrônica de Trânsito. [São Paulo], 2006.


Disponível em: <http://www.sinaldetransito.com.br/artigos/fiscalizacao-eletronica-do-
transito.pdf> Acesso em 28/03/2018.

MONTANARI, Raphael. Detecção e classificação de objetos em imagens para


rastreamento de veículos. 2015. 77 f. Dissertação (Mestrado – Programa de Pós-
Graduação em Ciências de Computação e Matemática Computacional) – Instituto de
Ciências Matemáticas e de Computação, Universidade de São Paulo, São Carlos,
2015. Orientadora: Roseli Aparecida Francelin Romero. Disponível em:
<file:///C:/Users/mafur/Downloads/RaphaelMontanari_dissertacao_revisada.pdf>
Acesso em 06/05/2018.

NIKU, Saeed Benjamin. Introdução à robótica: análise, controle, aplicações. 2


ed. Rio de Janeiro: LTC, 2013.

ORGANIZAÇÃO DAS NAÇÕES UNIDAS (ONU). Assembleia Geral das Nações


Unidas (AGNU). Resolução A/RES/64/255. Improving global road safety. 10 de
maio de 2010. Disponível em:
<http://www.un.org/en/ga/search/view_doc.asp?symbol=A/RES/64/255> Acesso em:
27/03/2018.
86

ORGANIZAÇÃO MUNDIAL DA SAÚDE (OMS), Global Status Report on Road


Safety. 2015. Disponível em:
<http://apps.who.int/iris/bitstream/10665/189242/1/9789241565066_eng.pdf?ua=1>
Acesso em 27/03/2018.

PAZOS, Fernando. Automação de sistemas e robótica. Rio de Janeiro: Axcel


Books, 2002.

PERES, Leonardo Mota. Aplicação de Processamento Digital de Imagens a


problemas da Engenharia Civil. 2010. 86 f. Trabalho de Conclusão de Curso
(Engenharia Civil) – Faculdade de Engenharia da UFJF, Juiz de Fora, 2010.
Orientador: Flávio de Souza Barbosa, D.Sc. Disponível em: <
http://www.ufjf.br/mac/files/2009/05/TFCLeandroMota.pdf> Acesso em 07/05/2018.

REIS, Marlon de Souza. Monitoramento Automático de Trânsito Através de


Técnicas de Visão Computacional com o OpenCV. 2014. Dissertação (Mestrado
Profissional em Sistemas de Informação e Gestão do Conhecimento) – Universidade
Fumec, Belo Horizonte, 2014. Orientador: João Victor Boechat Gomide. Disponível
em: <http://www.fumec.br/revistas/sigc/article/download/2551/1525> Acesso em:
08/05/2018.

RODRIGUES, Mauro Fonseca. Realce de contornos em imagens radiológicas


digitais. 2010. Trabalho de Conclusão de Curso. Curso de Engenharia Elétrica,
Universidade Regional do Noroeste do Estado do Rio Grande do Sul – UNIJUÍ, Ijuí,
2010.

SANTOS, Francisco Heider Willy dos. Desenvolvimento de um sistema de


identificação de ultrapassagens irregulares por análise de imagens. 2014. 102 f.
Dissertação (Mestrado em Processamento Digital de Sinais e Visão de Máquina) -
Universidade Federal de Lavras, Minas Gerais, 2014. Orientador: Giovanni
Francisco Rabelo. Disponível em:
<http://repositorio.ufla.br/bitstream/1/4454/1/DISSERTA%C3%87%C3%83O%20Des
envolvimento%20de%20um%20sistema%20de%20identifica%C3%A7%C3%A3o%2
0de%20ultrapassagens%20irregulares%20por%20an%C3%A1lise%20de%20image
ns.pdf> Acesso em 28/03/2018.

SCURI, Antônio Escaño. Fundamentos da Imagem Digital. Tegraf/Puc. Rio de


Janeiro, Janeiro de 1999. Disponível em: <
https://www.inf.ufes.br/~thomas/graphics/www/apostilas/CIV2801ScuriImgDigital.pdf
> Acesso em 07/05/2018.

SILVA, Fernando de Azevedo. Aplicação das técnicas de processamento digital


de imagens na caracterização de materiais. Tese (Doutorado em Materiais e
Processos de Fabricação – Faculdade de Engenharia Mecânica). Universidade
Estadual de Campinas, Campinas, São Paulo, 1996. Disponível em: <
http://repositorio.unicamp.br/jspui/bitstream/REPOSIP/263045/1/Silva_FernandodeA
zevedo_D.pdf> Acesso em 07/05/2018.
87

TRINDADE, Marcelo A; SAMPAIO, Rubens. Introdução ao MATLAB. PUC – Rio de


Janeiro, 3 de setembro de 2010. Disponível em:
http://www2.eesc.usp.br/labdin/trindade/Introducao_MATLAB_2ed.pdf> Acesso em:
16/05/2018.

ZANOTTA, Daniel C. Comandos básicos voltados ao processamento de


imagens em MATLAB. Curso Técnico em Geoprocessamento. Instituto Federal de
Educação, Ciência e Tecnologia do Rio Grande do Sul – Câmpus Rio Grande. 2015.
Disponível em: <
http://academico.riogrande.ifrs.edu.br/~daniel.zanotta/arquivos/Apostila_PDI.pdf>
Acesso em: 03/06/2018.
88

APÊNDICE A – FLUXOGRAMA COMPLETO DO ALGORITMO

Figura 78 – Parte I do Fluxograma completo.


89

Figura 79 - Parte II do Fluxograma completo.


90

Figura 80 - Parte III do Fluxograma completo.


91

APÊNDICE B – CÓDIGO FONTE

%-------TCC – Processamento de imagens de trânsito


%-------ALUNO: Marco Aurélio Furmann
%-------RESUMO: Detecção de ultrapassagens veiculares irregulares
%------ INICIO ------------------------------------------------------------------------------------------------------------------ %
clear all % limpa todas as variaveis armazenadas
close all % fecha todas as janelas
clc % limpa o workspace

%--- ANALISA-SE A PRESENÇA DE LINHA CONTINUA OU TRACEJADA A PARTIR DE UMA


IMAGEM DA PISTA LIVRE

%------ ANALISE A PARTIR DA PISTA LIVRE -------------%


%------ LEITURA DA IMAGEM DA PISTA LIVRE --------------------------------------------------------------------%
img_tracej = imread('testecontinua.jpg'); % salva a imagem da pista livre na variável
figure; imshow(img_tracej); title('Imagem adquirida da pista livre'); % apresenta a imagem adquirida
impixelinfo; % ferramenta de informações de pixel

%--- CONVERSÃO PARA ESCALA DE CINZA ----------------------------------------------------------------------%


img_tracej2=rgb2gray(img_tracej); % converte imagem para escala de cinza
figure; subplot(1,2,1);
imshow(img_tracej2); title('Imagem da pista livre em escala de cinza'); % apresenta a imagem em
escala de cinza

subplot(1,2,2);
imhist(img_tracej2); title('Histograma original');
impixelinfo;

% ----- AJUSTE DO BRILHO ----------------------------------------------------------------------------------------------%


img_tracejb=img_tracej2 - 80; % soma-se uma constante à imagem (aumenta brilho), diminuindo-
se constante (diminui brilho)

figure; subplot (1,2,1);


imshow(img_tracejb); title ('Imagem da pista livre com brilho ajustado')
subplot(1,2,2);
imhist(img_tracejb);title ('Histograma');
impixelinfo;

%------ AJUSTE DO CONTRASTE --------------------------------------------------------------------------------------%


limiar = 130; % todos valores acima de 130 são realçados e abaixo atenuados
img_traceja = double(img_tracejb)/limiar; % convertendo para classe 'double', onde numeros entre 0
e 1 para x<130 e números maiores que 1 para x>130

img_tracejb=img_traceja.^3; % aumento do contraste por potenciação, onde valores maior que 1


ficam ainda maiores e menores que 1 ainda menores

img_tracejc=uint8(img_tracejb*limiar); % convertendo para a classe 'uint9'


figure; subplot(1,2,1); imshow(img_tracejc); title('Imagem da pista livre com contraste ajustado');
subplot(1,2,2); imhist(img_tracejc); title('Histograma');

%---- SELEÇÃO DA REGIÃO DE INTERESSE DA IMAGEM - ROI(CENTRO ~40%) ---------------------%

[lin_a, col_a]=size(img_tracejc); % tamanho da matriz da imagem


centro=col_a/2;
img_tracej2=img_tracejc(126:lin_a,(centro-(col_a*0.15):(centro+(col_a*0.2))));
figure; subplot (1,2,1); imshow(img_tracej2); title('Região de Interesse (ROI) da pista livre');
92

subplot(1,2,2); imhist(img_tracej2); title('Histograma');


impixelinfo;
% whos img_tracej2; % mostra o atributos da imagem
% figure; imhist(img_tracej2); title('Histograma da imagem adquirida'); % apresenta o histograma da
imagem em escala de cinza

%------ BINARIZAÇÃO USANDO MÉTODO DE OTSU ------------------------------------------------------------%


level = graythresh(img_tracej2); % limiar normalizado para o intervalo [0, 1]
img_bw= im2bw(img_tracej2,level);
figure; imshow(img_bw); title('ROI da pista livre binarizada com Método de Otsu');
impixelinfo;

%------ ELIMINAÇÃO DE ELEMENTOS DESCONEXOS (OBJETOS PEQUENOS) -----------------------%


bw=bwareaopen(img_bw,15); % remove objetos menores que 15 pixels
figure; imshow(bw); title('ROI da pista livre com objetos desconexos eliminados');

%------ SUAVIZAÇÃO DA SINALIZAÇÃO (EROSÃO BINARIA) -------------------------------------------------%


seD=strel('line',5,90); % cria o elemento de estruturação tipo linha com comprimento 5 e
inclinação de 90 graus

BWfinal=imerode(bw,seD); % realiza a erosão


figure, imshow(BWfinal), title('Sinalização horizontal da pista livre suavizada');
[linBW, colBW]=size(BWfinal); % tamanho de r (para usar no mapeamento em caso de linha
continua)

%------ ROTULAÇÃO DOS OBJETOS DA ROI -----------------------------------------------------------------------%


r_label=bwlabel(BWfinal); % etiquetar componentes conectados em imagem binária
(conectividade-8)

figure; imshow(label2rgb(r_label));
impixelinfo;
[B,L]=bwboundaries(BWfinal,'noholes'); % B representa o limite de cada objeto encontrado

%------ CÁLCULO DA ÁREA, CENTRO DE MASSA E NÚMERO DE OBJETOS DA ROI--%


stats=regionprops(L); %calcula a Área, Centro de massa e Boundingbox (caixa delimitadora) dos
objetos

hold on
for k=1:length(B) % comprimento de B determina o número de objetos rotulados
boundary=B{k}; % representa o limite de um conjunto de pontos
plot(boundary(:,2), boundary(:,1), 'black', 'LineWidth', 2) %interliga os pontos, marcando a
fronteira dos objetos

end
for k=1:length(B) %obtem (X,Y) do contorno k
boundary=B{k};
area=stats(k).Area; %obtem a area calculada correspondente ao rotulo 'k'
area_string=sprintf('%.0f',area); %transforma area em formato string
n_objetos=k;
% text(stats(k).Centroid(1)+1,stats(k).Centroid(2),area_string,...
% 'Color', 'white', 'FontSize',8, 'FontWeight','bold',...
% 'BackgroundColor','black', 'FontName','Times');
title ('Rotulação e número dos objetos encontrados na ROI da pista livre');
end
if n_objetos>=3

%------ LINHA TRACEJADA/SECCIONADA DETECTADA, PORTANTO ULTRAPASSAGEM É


PERMITIDA -------------------------------------------------------------------------------------------------------------------- %
text(size(r_label,2),size(r_label,1)+10,...
93

sprintf('Total de objetos encontrados: %0.f.',n_objetos),...


'FontSize',10,'FontName','Arial', 'HorizontalAlignment','right');
hold off
figure; imshow(img_tracej); title('Linha tracejada/seccionada detectada - Permitida ultrapassagem');
else

%------ LINHA CONTINUA DETECTADA, PORTANTO ULTRAPASSAGEM É PROIBIDA --------------%


text(size(r_label,2),size(r_label,1)+10,...
sprintf('Total de objetos encontrados: %0.f.',n_objetos),...
'FontSize',10,'FontName','Arial', 'HorizontalAlignment','right');
hold off
area=0;
figure; imshow(img_tracej); title('Linha contínua detectada - Proibida Ultrapassagem');

%---- NESSE CASO, DESEJA-SE MAPEAR A LINHA CONTÍNUA, VERIFICANDO E


ARMAZENANDO OS VALORES DOS PIXELS E POSIÇÕES, PARA COMPARAR
POSTERIORMENTE NO MONITORAMENTO%

%---- MAPEAMENTO DA LINHA CONTÍNUA COM PISTA LIVRE ---------------------------------------------%


t=1;
q=1;
for i=1:linBW
for j=1:colBW
if (BWfinal(i,j)==1) % verifica onde se localizam os pixels em branco (faixa central da pista)
x_coluna(1,t)=j; % armazena posição x(coluna) de r no vetor, se pixel corresponder a 1
(branco)
t=t+1;
y_linha(1,q)=i; % armazena posição y(linha) de r no vetor, se pixels corresponder a 1
(branco)
q=q+1;
end
end
end
[lin_x,col_x]=size(x_coluna); % vetores com as informações de posição dos pixels
[lin_y,col_y]=size(y_linha); % em branco

%------ APÓS, FAZ-SE A VARREDURA DE UMA NOVA IMAGEM, DE FORMA A VERIFICAR


SE OS PIXELS DA FAIXA CONTÍNUA SE ALTERAM, INDICANDO QUE ALGUM OBJETO SE
SOBREPOS A FAIXA ------------------------------------------------------------------------------------------------------- %

%------ NOVA LEITURA DA IMAGEM DA PISTA --------------------------------------------------------------------%


n_img = imread('testecontinuacomcarro.jpg'); % salva a imagem da pista livre na variável
figure; imshow(n_img); title('Nova imagem adquirida da pista'); % apresenta a imagem aquirida
impixelinfo; % ferramenta de informações de pixel

%------ CONVERSÃO PARA ESCALA DE CINZA -------------------------------------------------------------------%


n_imggray=rgb2gray(n_img); % converte imagem para escala de cinza
figure; imshow(n_imggray); title('Nova imagem da pista em Escala de Cinza'); % apresenta a imagem
em escala de cinza

impixelinfo; % mostra a localização do pixel e a informação de seu valor

% ----- AJUSTE DO BRILHO ----------------------------------------------------------------------------------------------%


n_imgb=n_imggray - 80; % soma-se uma constante à imagem (aumenta brilho), diminuindo-se
constante (diminui brilho)

figure; subplot (1,2,1);


imshow(n_imgb); title ('Nova Imagem da pista com Brilho ajustado')
subplot(1,2,2);
94

imhist(n_imgb);title ('Histograma');
impixelinfo;

%------ AJUSTE DO CONTRASTE --------------------------------------------------------------------------------------%


limiar2 = 130; % todos valores acima de 150 são realçados e abaixo atenuados
n_imga = double(n_imgb)/limiar2; % convertendo para classe 'double', onde numeros entre 0 e 1
para x<150 e números maiores que 1 para x>150

n_imgb=n_imga.^3; % aumento do contraste por potenciação onde, valores maior que 1 ficam
ainda maiores e valores menores que 1 ainda menores

n_imgc=uint8(n_imgb*limiar2); % convertendo para a classe 'uint9'


figure; subplot(1,2,1); imshow(n_imgc); title('Nova Imagem da pista com Contraste ajustado');
subplot(1,2,2); imhist(n_imgc); title('Histograma');

%------ SELEÇÃO DA REGIÃO DE INTERESSE - ROI (CENTRO ~40%) ------------------------------------%


[n_lin, n_col]=size(n_imgc); % tamanho da matriz da imagem
n_centro=n_col/2;
n_imgc2=n_imgc(126:n_lin,(n_centro-(n_col*0.15):(n_centro+(n_col*0.2))));
figure; imshow(n_imgc2); title('ROI da nova imagem da pista');
impixelinfo;

%------- BINARIZAÇÃO USANDO MÉTODO DE OTSU------------------------------------------------------------%


n_level = graythresh(n_imgc2); % limiar normalizado para o intervalo [0, 1]
n_img_bw= im2bw(n_imgc2,n_level);
figure; imshow(n_img_bw); title('ROI da nova imagem da pista binarizada com Método de Otsu');
impixelinfo;

%------ ELIMINAÇÃO DE ELEMENTOS DESCONEXOS (OBJETOS PEQUENOS) -----------------------%


n_bw=bwareaopen(n_img_bw,15); % remove objetos menores que 15 pixels
figure; imshow(n_bw); title('ROI da nova imagem da pista com objetos desconexos eliminados');

%------ SUAVIZAÇÃO DA SINALIZAÇÃO (EROSÃO BINARIA) -------------------------------------------------%


seD2=strel('line',5,90); % cria o elemento de estruturação tipo linha com comprimento 5 e
inclinação de 90 graus

BWfinal2=imerode(n_bw,seD2); % realiza a erosão


figure, imshow(BWfinal2), title('ROI da nova imagem da pista suavizada');

%----- DILATANDO O OBJETO (DILATAÇÃO BINARIA) ----------------------------------------------------------%


se90=strel('line',8,90); % elemento estruturador vertical
se0=strel('line',5,0); % elemento estruturador horizontal
BWsdil=imdilate(BWfinal2, [se90 se0]); % dilatando a imagem
figure, imshow(BWsdil), title('ROI da nova imagem da pista dilatada');

%-------- COMPARAÇÃO DA NOVA IMAGEM COM IMAGEM DA PISTA LIVRE ---------------------------%


corte_inicialx=0;
corte_inicialy=0;
corte_finalx=0;
corte_finaly=0;

for m=1:col_x
if (BWsdil((y_linha(1,m)),(x_coluna(1,m)))==0)
corte_inicialx=x_coluna(1,m);
corte_inicialy=y_linha(1,m);
break
end
end
95

if ((corte_inicialx>0)&&(corte_inicialy>0))
for k=1:col_x
if (BWsdil((y_linha(1,k)),(x_coluna(1,k)))==0)
corte_finalx=x_coluna(1,k);
corte_finaly=y_linha(1,k);
k;
end
end
fprintf(' Descontinuidade detectada!!!\n');
fprintf(' Objeto se sobrepôs a linha \n')
fprintf(' Ponto inicial do objeto: (%d,%d) [X,Y]\n',corte_inicialx,corte_inicialy);
fprintf(' Ponto final do objeto: (%d,%d) [X,Y]\n',corte_finalx,corte_finaly);

%----- ISOLA O OBJETO ENCONTRADO A PARTIR DA IMAGEM EM CINZA -----------------------------%


novo=n_imggray((corte_inicialy+126):(corte_finaly+15+126),(n_centro-
(n_col*0.15)):(n_centro+(n_col*0.2))); % objeto isolado da imagem em escala de cinza, o +15 serve
pra mostrar o pneu do carro

[lin_novo, col_novo]=size(novo);
figure; imshow(novo); title('Objeto isolado');
%figure; imhist(novo);
impixelinfo;

%------- AUMENTO DO CONTRASTE COM IMADJUST ----------------------------------------------------------%


novoa=imadjust(novo, [0.3 0.7], []); % aumento contraste com imadjust
figure; subplot (1,2,1); imshow(novoa); title('Objeto com contraste aprimorado');
subplot (1,2,2); imhist(novoa); title('Histograma');

%----- BINARIZA O OBJETO ENCONTRADO ------------------------------------------------------------------------%


novo2=novoa<=124;
impixelinfo;
figure; imshow(novo2); title('Objeto binarizado manualmente');
level = graythresh(novo); % limiar normalizado para o intervalo [0, 1]
novo3= im2bw(novo,level);

%----- REMOVENDO OBJETOS PEQUENOS (RUIDOS) ---------------------------------------------------------%


bw2=bwareaopen(novo2,25); % remove objetos menores que 15 pixels
figure; imshow(bw2); title('Ruidos eliminados');

%----- DILATANDO O OBJETO (DILATAÇÃO BINARIA) ----------------------------------------------------------%


se_90=strel('line',7,90); % elemento estruturador vertical
se_0=strel('line',5,0); % elemento estruturador horizontal
BWsdil=imdilate(bw2, [se_90 se_0]); % dilatando a imagem
figure, imshow(BWsdil), title('Objeto dilatado');

%----- OPERAÇÃO DE FECHAMENTO BINARIA -------------------------------------------------------------------%


se=strel('disk',4); % preenche o buraco na ponta do retrovisor esquerdo
bw3=imclose(BWsdil,se); % operação de fechamento morfológica
figure; imshow(bw3); title('Retrovisor esquerdo preenchido'); % retrovisor esquerdo preenchido

%----- SUAVIZANDO O OBJETO COM EROSÃO BINARIA ------------------------------------------------------%


seD=strel('diamond',2); % cria o elemento de estruturação
BWfinal=imerode(bw3,seD); % realiza a erosão
figure, imshow(BWfinal), title('Objeto suavizado');

%------ ROTULANDO OS OBJETOS ENCONTRADOS NA ROI-------------------------------------------------%


[B,L]=bwboundaries(BWfinal,'noholes'); % B representa o limite de cada objeto encontrado
96

figure; imshow(label2rgb(L));
hold on
for k=1:length(B)
boundary=B{k};
plot(boundary(:,2), boundary(:,1), 'black', 'LineWidth', 2)
end

%----CALCULO DA ÁREA E CENTROIDE DO OBJETO ----------------------------------------------------------%


stats2=regionprops(L,'Area','Centroid');
for k=1:length(B) %obtem (X,Y) do contorno k
boundary=B{k};
centroid=stats2(k).Centroid; % obtém a área calculada correspondente ao rotulo 'k'
plot(centroid(1),centroid(2),'r+'); % plota um "+" no centro do objeto que interceptou a linha
area=stats2(k).Area; % obtém a área calculada correspondente ao rotulo 'k'
area_string=sprintf('%.0f',area); % transforma área em formato string
n_objetos2=k;
centroid_string=sprintf('%0.f,%0.f',centroid(1),centroid(2)); % transforma centróide em formato
string
text(boundary(1,2)+6,boundary(1,1)+12,area_string,...
'Color', 'white', 'FontSize',9, 'FontWeight','bold',...
'BackgroundColor','black', 'FontName','Times');
title ('Área e centróide do objeto encontrado');
end
text(size(L,2),size(L,1)+10,...
sprintf('Área do objeto: %0.f pixels.',area),...
'FontSize',10,'FontName','Arial', 'HorizontalAlignment','right');
text(size(L,2),size(L,1)+20,...
sprintf('Centróide em: (%0.f,%0.f). ',centroid(1),centroid(2)),...
'FontSize',10,'HorizontalAlignment','right');
text(size(L,2),size(L,1)+30,...
sprintf('Total de objetos encontrados: %0.f.',n_objetos2),...
'FontSize',10,'FontName','Arial', 'HorizontalAlignment','right');
hold off
impixelinfo;

%----- AMOSTRA DO OBJETO COM DELINEAMENTO ---------------------------------------------------------%


BWoutline=bwperim(BWfinal); % verifica o perimetro do objeto isolado
novodel=novo; % salva a imagem do objeto isolado em escala de cinza
novodel(BWoutline)=255; % plota o perimetro na imagem em escala de cinza com cor branca
(255).
figure, imshow(novodel), title('Objeto isolado delineado');
hold on
%plot(centroid(1),centroid(2),'r+');
hold off

%----- RECONSTRUIDO A IMAGEM EM ESCALA DE CINZA COM O OBJETO ISOLADO E


DELINEADO -------------------------------------------------------------------------------------------------------------------%
for j=1:n_col % reconstrói a imagem deixando espaço interno referente ao objeto isolado
for i=1:n_lin
if (i<corte_inicialy+126)
novodel2(i,j)=n_imggray(i,j);
end
if ((i>=corte_inicialy+126)&&(j<(n_centro-(n_col*0.15)))&&(i<=corte_finaly+126+15))
novodel2(i,j)=n_imggray(i,j);
end
if ((i>=corte_inicialy+126)&&(j>(n_centro+(n_col*0.2)))&&(i<=corte_finaly+126+15))
novodel2(i,j)=n_imggray(i,j);
end
if (i>corte_finaly+126+15)
novodel2(i,j)=n_imggray(i,j);
97

end
end
end
novodel2(corte_inicialy+126:corte_finaly+126+15,(n_centro-
(n_col*0.15)):(n_centro+(n_col*0.2)))=novodel(:,:); %junta objeto isolado ao espaço interno anterior
if area>10000
figure; imshow(novodel2); title('Descontinuidade Detectada - Veículo');
imwrite(novodel2,'Descontinuidade detectada.jpeg'); % salva a infração em arquivo de imagem
else
figure; imshow(novodel2); title ('Descontinuida Detectada - Objeto não é veículo');
end
else
fprintf('Condição normal');
figure; imshow(n_img); title('Condição normal - Sem ultrapassagem indevidas detectadas');

end
end
%--- FIM --------------------------------------------------------------------------------------------------%

Você também pode gostar