• Nenhum resultado encontrado

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)),...

Documentos relacionados