Este é um problema extremamente difícil. Eu fazia parte de uma equipe que trabalhava nele há vários anos e, tendo desenvolvido e suportado outros aplicativos por um longo tempo, posso dizer que a detecção de dentes é um problema particularmente complicado e muito mais difícil do que parece à primeira vista.
Ter um algoritmo funcionando em condições de laboratório ou em imagens conhecidas é uma coisa; o desenvolvimento de um sistema preciso e robusto para imagens "naturais", como carros vistos em um estacionamento, provavelmente exigiria uma equipe trabalhando por vários anos. Além do problema central da criação do algoritmo, existem inúmeras outras dificuldades de engenharia.
O código de exemplo que você testou não é um começo ruim. Se você pudesse encontrar as arestas ao redor do lado direito escuro do amassado, poderia comparar o mapa de arestas do carro com o ding com o mapa de arestas de um bom carro conhecido, fotografado do mesmo ângulo e com a mesma iluminação. Controlar a iluminação ajudará bastante.
Os problemas a considerar incluem o seguinte:
- Iluminação (muito mais difícil do que pareceria)
- Superfície 3D esperada do painel externo montado (por exemplo, a partir de dados CAD)
- Critérios que caracterizam um dente: área, profundidade, perfil, etc.
- Critérios para falsos negativos e falsos positivos
- Significa salvar dados do dente e / ou mapear os dentes em um modelo de carro (ou layout de borboleta)
- Metodologia e dispositivo para medir características dentárias "verdadeiras": profundidade, área, etc.
- Ampla base de dados de amassados de uma amostragem aleatória de veículos
- Lidar com diferentes cores de tinta e acabamentos
1. Iluminação
Como Martin B observou corretamente acima, a iluminação correta é crítica para esse problema. Mesmo com uma boa iluminação estruturada, você terá grandes dificuldades em detectar pequenas amolgadelas próximas às linhas de recursos, intervalos entre painéis, alças e assim por diante.
A entrada da Wikipedia para iluminação estruturada é um pouco limitada, mas é um começo para entender o princípio:
http://en.wikipedia.org/wiki/Structured_light
Listras claras podem ser usadas para detectar entalhes (amolgadelas) e out-dings (espinhas). Para ver um ding, você precisará de um movimento relativo entre a fonte de luz e o carro. A câmera light + se move em relação ao carro ou o carro passa a câmera light +.
Embora as entradas e saídas tenham aparências características quando vistas na borda de uma faixa clara, a detectabilidade de um determinado dente depende do tamanho e profundidade do dente em relação à largura da faixa clara. A curvatura de um carro é complexa, por isso é bastante difícil apresentar uma faixa de luz consistente para a câmera. À medida que a faixa clara se move pelo corpo do carro, a curvatura e até a intensidade da faixa clara variam.
Uma solução parcial é garantir que a câmera e a faixa de luz estejam sempre em um ângulo consistente em relação ao normal (a perpendicular 3D) da parte da superfície que está sendo inspecionada. Na prática, seria necessário um robô para mover a câmera com precisão em relação à superfície do corpo. Mover o robô com precisão requer conhecimento da pose (posição e ângulos 3D) da carroceria do carro, que é um problema desagradável por si só.
Para qualquer inspeção de aplicações automotivas, você precisa controlar completamente a iluminação. Isso significa não apenas colocar as luzes de sua escolha em locais conhecidos, mas também bloquear todas as outras luzes. Isso significa um gabinete bastante grande. Como os painéis do carro são curvos para fora (quase como uma superfície esférica), eles refletem a luz das fontes ao seu redor. Para simplificar bastante esse problema, você pode usar uma barra fluorescente de alta frequência dentro de um gabinete envolto em veludo preto. Muitas vezes é necessário ir a extremos como esse para aplicações de inspeção.
2. Superfície 3D
A superfície externa de um carro é composta por curvas complexas. Para saber se um ponto suspeito é um ding, você precisa comparar esse ponto com os recursos conhecidos do carro. Isso significa que você precisaria combinar a imagem 2D de uma câmera com um modelo 3D visualizado em um determinado ângulo. Esse não é um problema resolvido rapidamente, e é difícil o suficiente para que algumas empresas se especializem nele.
3. Caracterização de defeitos
Para pesquisas acadêmicas ou testes de laboratório, pode ser suficiente desenvolver um algoritmo que mostre promessas ou melhore um método existente. Para resolver adequadamente esse problema para uso comercial ou industrial real, você precisa ter uma especificação altamente detalhada para o tamanho dos amassados que deseja detectar.
Quando resolvemos esse problema, não havia padrões razoáveis da indústria ou nacionais para amassados (deformações em 3D). Ou seja, não havia uma técnica combinada para caracterizar um dente por sua área, profundidade e forma. Acabamos de ter amostras que os especialistas do setor concordaram que eram ruins, não muito ruins e marginais em termos de gravidade. Definir a "profundidade" de um ding também é complicado, pois um ding é um recuo 3D em (normalmente) uma superfície 3D curvada para fora.
Dings maiores são mais fáceis de detectar, mas também são menos comuns. Um trabalhador experiente em automóveis pode escanear um corpo de carro rapidamente - muito mais rapidamente do que um observador não treinado - e encontrar dings rasos do tamanho de seu dedo mindinho rapidamente. Para justificar o custo de um sistema automatizado, você provavelmente teria que corresponder à capacidade de um observador experiente.
4. Critérios para erros de detecção Desde o
início, você deve definir critérios para falsos negativos e positivos positivos aceitáveis. Mesmo se você estiver apenas estudando esse problema como um projeto de P&D e não pretender desenvolver um produto, tente definir seus critérios de detecção.
falso negativo: dente presente, mas não detectado falso positivo: área sem manchas identificada como dente
Normalmente, há uma troca: aumente a sensibilidade e você encontrará mais dings (diminua os falsos negativos), mas também encontrará mais dings que não estão lá (aumente os falsos positivos). É muito fácil convencer-se de que um algoritmo tem um desempenho melhor do que realmente: nosso viés natural é perceber defeitos detectados pelo algoritmo e explicar aqueles que não foram detectados. Realize testes cegos e automatizados. Se possível, peça a alguém que meça os toques e atribua a gravidade para que você não saiba quais são as medidas reais.
5. Salve os dados e / ou mapeie-os
Um dente é caracterizado por sua gravidade e sua localização na carroceria do carro. Para conhecer sua localização, você deve resolver o problema de correspondência 2D para 3D mencionado acima.
6. Determinar a forma "verdadeira" dos dentes Os
dentes são difíceis de medir. Um dente agudo e um dente arredondado da mesma área e profundidade da superfície parecerão diferentes. Medir amassados por meios mecânicos leva a julgamentos subjetivos, e também é muito entediante usar medidores de profundidade, réguas, etc., quando você provavelmente precisará medir dezenas, se não mais.
Esse é um dos problemas de engenharia mais difíceis de resolver para qualquer projeto de detecção de defeitos para fabricação: como se mede um defeito e o caracteriza? se houver um padrão para fazê-lo, o padrão se correlaciona bem com algo que o sistema de inspeção mede? se o sistema de inspeção não encontrar um ding que "deveria ter" encontrado, quem é o culpado?
Dito isto, se um sistema de inspeção funcionar bem o suficiente para uma amostra de defeitos conhecidos, os usuários poderão eventualmente confiar nele, e o próprio sistema se tornará o padrão para definir a gravidade do defeito.
7. Banco de dados extenso de amolgadelas
Idealmente, você teria centenas, senão milhares, de imagens de amostra de amolgadelas de diferentes gravidades em diferentes locais em veículos de fabricantes difíceis. Se você estiver interessado em encontrar amolgadelas causadas por acidentes durante o processo de montagem, poderá levar muito tempo para coletar esse tipo de dados. Amassados causados durante o processo de montagem não são comuns.
Se você está interessado apenas em encontrar mossas causadas por acidentes ou danos ambientais, isso é outra questão. Os tipos de amolgadelas serão diferentes daqueles causados por colisões acidentais dentro de uma montadora de automóveis.
8. Lidando com cores de tinta diferentes
É verdade que os detectores de bordas podem ser razoavelmente robustos na detecção de bordas em imagens com diferentes níveis de contraste, mas pode ser bastante desanimador ver o que "níveis variados de contraste" realmente significam para diferentes tintas e acabamentos automotivos . Uma faixa clara que fica ótima em um carro preto brilhante dificilmente pode ser detectada em um carro branco com tinta velha.
Como a maioria das câmeras possui alcance dinâmico relativamente limitado, é difícil obter um bom contraste para superfícies brilhantes pretas e superfícies opacas brancas. É bem provável que você precise controlar automaticamente a intensidade da iluminação. Isso também é difícil.