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.
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.
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
<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.
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:
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.
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.
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.
APÊNDICE A – FLUXOGRAMA COMPLETO DO ALGORITMO Figura 78 – Parte I do Fluxograma completo.
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))));
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,...
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 POSTERIORMENTENO 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);
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
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
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)),...