Departamento Acadêmico de Eletrônica (DAELN)- Universidade Tecnológica Federal do Paraná (UTFPR) Curso superior de Tecnologia em Sistemas de Telecomunicações

October 15, 2017 | Autor: Daniel Natividade | Categoria: Matlab, Detecting
Share Embed


Descrição do Produto

defeitos

Implementação de algoritmo de tratamento de imagens para detecção de falhas em cordão de solda

Rafael Marques Ilivinski

Departamento Acadêmico de Eletrônica (DAELN) - Universidade Tecnológica Federal do Paraná (UTFPR) Curso superior de Tecnologia em Sistemas de Telecomunicações Curitiba – PR – Brasil [email protected] Resumo: Este artigo visa apresentar os resultados obtidos na implementação em Matlab do algoritmo de tratamento de imagens para detecção de falhas em cordão de solda. Várias imagens foram fornecidas pelo professor Luís Alberto Lucas, onde cada imagem tem falhas distintas no cordão de solda, sendo que o algoritmo deveria detectar e realçar as falhas em pelo menos três dessas imagens. Palavras-chave: Matlab, falhas, detecção. Abstract: This article aims to present the results obtained in the Matlab implementation of the image treatment algorithm for detecting flaws in weld bead. Several images were provided by Professor Luis Alberto Lucas, where each image has distinct flaws in the weld bead, and the algorithm should detect and highlight the failures in at least three of these images. Keywords: Matlab, flaws, detecting.

1.

Introdução

O presente trabalho visa detectar erros em cordão de solda por meio de um algoritmo. Inicialmente, foi implementado em MatLab um algoritmo baseado em conceitos vistos em aula, especificamente os conceitos de limiarização, morfologia matemática e elementos estruturantes, e também baseado em trabalhos similares, como a dissertação de mestrado “Segmentação e extração das características de defeitos em imagens radiográficas de junta soldadas e tubulações”, do professor Guilherme Schneider, que foi estudada durante as aulas. Antes de iniciar a detecção das falhas, as imagens utilizadas foram segmentadas manualmente para enfatizar apenas a parte relativa ao cordão de solda, já que as imagens fornecidas são de tubos inteiros e a parte do cordão corresponde apenas a uma parte do tubo. Para a análise dos resultados, a cada etapa da implementação era possível visualizar uma imagem, possibilitando conferir o efeito que cada função utilizada causava na imagem original.

2.

Base Teórica

2.1. Limiarização

Acho que aqui não é em letra maiúscula. Verifique nas normas da UTFPR.

Segundo MARQUES FILHO & VIEIRA NETO (1999, p. 71), a limiarização “consiste em separar as regiões de uma imagem quando esta apresenta duas classes (o fundo e o objeto). Devido ao fato da limiarização produzir uma imagem binária à saída, o processo também é denominado, muitas vezes, binarização. A forma mais simples de limiarização consiste na bipartição do histograma, convertendo os pixels cujo tom de cinza é maior ou igual a um certo valor de limiar em brancos e os demais em pretos.” 2.2. Morfologia Matemática Segundo MARQUES FILHO & VIEIRA NETO (1999, p. 139), morfologia matemática “consiste em extrair as informações relativas à geometria e à topologia de um conjunto desconhecido (uma imagem), pela transformação através de outro conjunto completamente definido, chamado elemento estruturante.”

3.

Implementação Matlab e Resultados

Para facilitar a implementação, foram utilizadas imagens com falhas similares. Como pode ser observado nas figuras 1,2 e 3, as imagens possuem baixo contraste.

Figura 1: imagem CP1-1B_Seifert-_kV_mA_3.0min.tif original.

Figura 2: imagem CP1-2B_Seifert-_kV_mA_3.0min.tif original.

Figura 3: imagem CP2-2B_Seifert-_kV_mA_3.5min.tif original. Para possibilitar a detecção dos erros nas imagens foi utilizada a função im2double, conforme mostra o quadro 1, que converte os pixels da imagem para números reais, caso contrário ao final da implementação apareceria somente um fundo branco e não realçaria os defeitos. i = imread( 'CP1-1B_Seifert-_kV_mA_3.0min.tif'); _kV_mA_3.0min.tif' i = im2double(i);

%



a

imagem

'CP1-1B_Seifert-

O CÓDIGO DEVE VIR NOS ANEXOS.

% i = imread( 'cp1-2b_seifert-_kv_ma_3.0min.tif'); % i = im2double(i); % i = imread( 'CP2-2B_Seifert-_kV_mA_3.5min.tif'); % i = im2double(i);

Quadro1: Leitura da Imagem ‘i’ e conversão para double usando a função im2double. Depois cada imagem foi segmentada manualmente de modo que enfatizasse a parte do cordão de sendo que solda. Foi feita também a inversão de contraste para poder visualizar os defeitos da imagem, as imagens também foram rotacionadas em 90 graus para facilitar a visualização. A função utilizada pode ser observada no quadro 2 e as imagens resultantes são observadas nas figuras 4, 5 e 6. i= i( :, 1200:2000); % segmentação para enfatizar apenas a parte relativa ao cordão de solda. I1 = imrotate( i, 90); % rotaciona a imagem para melhor visualização. figure, imshow(I1, []); % O campo [ ] inverte o contraste da imagem para visualização. Quadro 2: Segmentação manual da imagem na região relativa ao cordão de solda e rotação em 90 graus e inversão de constraste. O campo [ ] na função ‘imshow’ aumenta o contraste da imagem ‘I1’para melhor visualização.

Figura 4: imagem CP1-1B_Seifert-_kV_mA_3.0min.tif segmentada, rotacionada e com aumento de contraste.

Figura 5: imagem CP1-2B_Seifert-_kV_mA_3.0min.tif segmentada, rotacionada e com aumento de contraste.

Figura 6: imagem CP2-2B_Seifert-_kV_mA_3.5min.tif segmentada, rotacionada e com aumento de contraste. a maioria dos

Foi utilizado o filtro Bottom-hat para salientar possíveis defeitos, e como os defeitos nas imagens tem formato circular são em furos, o elemento estruturante utilizado foi o disco, neste caso com raio 13. Em seguida foi feita a limiarização para deixar os defeitos e eliminar o resto, as duas funções são mostradas no quadro 3. % elemento estruturante disco de raio 15, usado no bottom-hat no proximo comando I3 se = strel('disk',13); % Bottom-hat para salientar descontinuidades (possíveis defeitos) I3 = imbothat(I1,se); % figure, imshow(I3); % imtool(I3); % Limiarização (deixa os defeitos e elimina o resto) I4 I4 = I3>2e-3; Quadro 3: Filtro Bottom-Hat utizando elemento estruturante disco (disk) com raio 13. Limiarização da imagem I3. Feita a limiarização, foi utilizado a função ‘imclose’ para o fechamento com elemento serve estruturante disco de raio 6, a função do fechamento é, segundo MARQUES FILHO, e VIEIRA para NETO, “fundir pequenas quebras e alargar golfos estreitos, eliminar pequenos orifícios e preencher gaps no contorno”. No quadro 4 é mostrada a função ‘imclose’, e nas figuras 7, 8 e 9 são mostradas as imagens resultantes após a aplicação da função ‘imclose’.

% Fechamento com disco de raio 6 (conecta pontos dos defeitos) se = strel('disk',6); % elemento estruturante disk de raio 6 I5 = imclose(I4, se); % conecta pontos dos defeitos figure, imshow(I5); Quadro 4: Função ‘imclose’ com elemento estruturante disco (disk) com raio 6, para efetuar fechamento dos pontos dos defeitos. A função ‘Figure, imshow’ mostra a imagem resultante desta operação (I5).

Figura 7: imagem CP1-1B_Seifert-_kV_mA_3.0min.tif após aplicação da função imclose.

Figura 8: imagem CP1-2B_Seifert-_kV_mA_3.0min.tif após aplicação da função imclose.

Figura 9: imagem CP2-2B_Seifert-_kV_mA_3.5min.tif após aplicação da função imclose. Feita esta etapa, já era possível visualizar o(s) defeito(s) na forma de manchas brancas enquanto o resto estava na cor preta, porém ainda apareciam manchas brancas que não eram interessantes. utilizada a erosão morfológica Para suavizar esse problema, foi usada a função erosão ‘imerode’, com elemento estruturante disco de raio 2 para eliminar esses ruídos. Com isso as imagens obtidas já estavam em um nível satisfatório e não foram mais manipuladas, no quadro 5 é mostra a função ‘imerode’, e nas figuras 10, 11 e 12 são mostradas as imagens resultantes.

% Erosão com disco de raio 2 para eliminar ruídos ( manchas em branco não interessantes) se = strel('disk', 2); I6 = imerode(I5, se); figure, imshow(I6); Quadro 5: Função ‘imerode’ utilizando elemento estruturante disk com raio 2, para eliminar ruídos das imagem I5 vista anteriormente nas figuras 7, 8 e 9. A função ‘Figure, imshow’ mostra a imagem resultante desta operação (I6).

Figura 10: imagem CP1-1B_Seifert-_kV_mA_3.0min.tif após aplicação da função imerode.

Figura 11: imagem CP1-2B_Seifert-_kV_mA_3.0min.tif após aplicação da função imerode.

Figura 12: imagem CP2-2B_Seifert-_kV_mA_3.5min.tif após aplicação da função imerode. 4.

Conclusão Os resultados obtidos nessa implementação mostram que é possível a detecção de erros em imagens, utilizando os conceitos e técnicas de processamento de imagens no Matlab vistos em aula, principalmente os conceitos de segmentação, limiarização, filtros e morfologia matemática. Por mais que seja difícil eliminar todos os elementos que não correspondam aos defeitos, o algoritmo para detectar e realçar os defeitos pode ser feito de maneira simples, não só em cordão solda, mas também pode ser utilizado para detectar defeitos em outros objetos, utilizando tanto estes conceitos como também outros para otimizar os resultados.

5.

Referências

1. MARQUES FILHO, O., & VIEIRA NETO, H. (1999). Processamento Digital de Imagens. Rio de Janeiro: Brasport. 2. SCHNEIDER, Guilherme. Segmentação e extração das características de defeitos em imagens radiográficas de juntas soldadas e tubulações. 2005. Dissertação (Mestrado em Ciências) - Programa de Pós-Graduação em Engenharia Elétrica e Informática Industrial, Centro Federal de Educação Tecnológica do Paraná, 2005. 3. STRAUHS, Faimara; GARCIA, Lilian; DAVID, Denise; CROCETTI, Simone. Normas para apresentação de trabalhos acadêmicos do DAELN (NATELN). UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ, Curitiba, 2006. 4. BECKER, Alex Jenaro; SILVA, Daiane Medianeira Ilha da; DIAS, Francisco Helmuth Soares; PINHEIRO, Lucélia Kowalski. Noções Básicas de Programação em MATLAB. Universidade Federal de Santa Maria, 2010.

Anexo I: Algoritmo completo da implementação com comentários % ALUNO: RAFAEL MARQUES ILIVINSKI % IMPLEMENTAÇÃO, CÓDIGO DE VERIFICAÇÃO DE ERROS NO CORDÃO DE SOLDA % O código da imagem 1 está pronto para ser emulado. % Os códigos das imagens 2 e 3 estão em comentários, abaixo da imagem 1. % Foi feita segmentação manual para mostrar somente a parte do cordão de % solda, já que é a única que interessa no tubo para esta implementação. % imagem 1: CP1-1 B i = imread( 'CP1-1B_Seifert-_kV_mA_3.0min.tif'); i = im2double(i); i= i( :, 1200:2000); % segmentação para enfatizar apenas a parte relativa ao cordão de solda I1 = imrotate( i, 90); % rotaciona a imagem para melhor visualização % imagem 2: CP1-2 B % i = imread( 'cp1-2b_seifert-_kv_ma_3.0min.tif'); % i = im2double(i); % i= i( :, 1200:2100); % segmentação para enfatizar apenas a parte relativa ao cordão de solda % I1 = imrotate( i, 90); % rotaciona a imagem para melhor visualização % imagem 3: CP2-2 B % i = imread( 'CP2-2B_Seifert-_kV_mA_3.5min.tif'); % i = im2double(i); % i= i( :, 1200:2100); % segmentação para enfatizar apenas a parte relativa ao cordão de solda % I1 = imrotate( i, 90); % rotaciona a imagem para melhor visualização figure, imshow(I1, []); % mostra a imagem, exceto pela inversão de contraste, sem modificações. % elemento estruturante disco de raio 15, % usado no bottom-hat no proximo comando I3 se = strel('disk',13); % Bottom-hat para salientar descontinuidades (possíveis defeitos) I3 = imbothat(I1,se); % figure, imshow(I3); % imtool(I3); % Limiarização (deixa os defeitos e elimina o resto) I4 = I3>2e-3; % Fechamento com disco de raio 6 (conecta pontos dos defeitos) se = strel('disk',6); I5 = imclose(I4, se); % figure, imshow(I5); % Erosão com disco de raio 2 para eliminar ruídos ( manchas em branco não % interessantes) se = strel('disk', 2); I6 = imerode(I5, se); figure, imshow(I6);

Lihat lebih banyak...

Comentários

Copyright © 2017 DADOSPDF Inc.