Olá Comunidade CV / Reconhecimento de padrões,
Eu tenho um problema sério em relação à segmentação de uma imagem. O cenário é uma atmosfera dentro de um forno que deixa minha cabeça louca. E preciso detectar contornos de objetos de diferentes materiais (vidro, cerâmica, Al, Ir, ..) em um curto período de tempo (<10 segundos) e não apenas em um caso especial. Também preciso do contorno em uma linha seqüencial de pixels para o código. Portanto, também é necessário um código de cadeia ou o chamado seguimento de borda / contorno, para que os furos abertos não sejam bons. No fundo, existem ruídos não lineares, aproximadamente de poeira, partículas ou algo mais, que aparecem periodicamente.
Sugestões Matlab ou OpenCV são bem-vindas.
Para deixar mais claro, publiquei outra imagem da minha meta e um objeto semitransparente, que também precisa ser detectado. Também exemplos adicionais que precisam estar cientes.
Como você pode ver na imagem nº 1, existem partículas na parte direita da imagem e próximas ao contorno externo da estrela, que é o objeto. Além disso, o contraste geral não é muito bom. O objeto em si fica em um subsolo, o que não é relevante para a detecção de contorno. A imagem 2 mostra um objeto semitransparente, o que também é possível.
Quero encontrar o contorno / perímetro desse objeto, como na próxima tela (linha vermelha). Os dois retângulos (amarelo) estão marcando o ponto inicial (esquerda) e o ponto final (direita). A linha azul é ignorável.
No começo, pensei que poderia resolver o problema daquela atmosfera imunda com apenas filtros. Mas, depois de uma quantidade honrosa de tempo de investimento, acabei de perceber que preciso elimar ou reduzir significativamente os ruídos para aumentar o contraste de primeiro plano e de fundo. Eu tentei vários métodos, como equalização de histograma, equalização adaptativa Otsu, filtros lineares (por exemplo, gauss), filtros não lineares (mediana, difusão), contornos ativos, k-Means, Fuzzy-c-means e também Canny por pura Detecção de Borda em combinação com operadores morfológicos.
- Canny: As partículas e a atmosfera estão causando buracos, mas eu preciso de um contorno completo do objeto. Ainda com fechamento, dilatação de operadores morfológicos, não é suficiente. Canny ainda tem os melhores resultados de todos os métodos que estudei por causa da histerese.
- Contornos ativos: Eles também trabalham em arestas / gradientes, agem completamente malucos após a inicialização dentro do objeto, o que talvez seja causado pelo mapa de arestas resultante do objeto 'aberto'. Até onde eu sei, o contorno precisa ser fechado. Tentei com diferentes derivados (GVF / VFC / Classic Snake).
- k-Meios: Os resultados incluem a atmosfera do forno, devido ao fundo nebuloso. O mesmo para difusa-c-médias. Eu escolhi dois clusters, por separar o objeto do plano de fundo. Mais clusters levam a resultados mais fracos.
- Histograma / Otsu: Devido às intensidades de cinza muito próximas (imho!), Ele está mesclando o objeto com o plano de fundo. Tentei com métodos locais e globais.
- Filtros: Especialmente GLPF ou outro LPF estão manchando as bordas, o que não é tão bom e nem reduz a atmosfera de neblina.
- Os filtros não lineares estão preservando as bordas. A maioria deles demora muito para calcular as imagens grandes. Tomou um filtro bilateral rápido por enquanto. Resultados veja abaixo.
Portanto, nem um único método é bom o suficiente para as etapas de pós-processamento, porque os resultados obtidos no segmento de objeto são pouco competitivos para um algoritmo existente. Esse algoritmo existente é muito local e, portanto, funciona para esse cenário muito especial.
Por isso, estou lhe perguntando, se perdi algo completamente ... Não tenho mais nenhuma idéia de como processar e como obter bons resultados de contorno, sem falhas ou falhas. É possível sem fazer muitas alterações no CCD e o ambiente físico? Desde já, obrigado!
Última abordagem até agora (após uma longa noite de experimentos com MOs):
- Filtro Bilateral (preservação de bordas, mas suavização de áreas homogêneas)
- Canny (Sigma = 2, Limiar = [0,04 0,08])
- Morfológica Operações (MO):
bwareopen
,closing
,remove
&bridge
bwlabel
para selecionar apenas o perímetro do contorno, o que remove ruídos indesejados. ainda não há capturas de tela atualizadas, mas funciona para a estrela. o vidro possui um contorno interno que é conectado ao contorno externo, que também pode ser visto na captura de tela abaixo.
Por isso, tenho medo de precisar de um algoritmo especial para a travessia do contorno externo. Será uma pesquisa de vizinhança no sentido horário / anti-horário. Essa etapa no sentido horário / anti-horário pode mudar, se houver um ponto de canto. se houver um espaço, aumente o raio e olhe novamente. se houver dois ou mais pontos possíveis, siga aquele que seguiu a mesma direção da anterior. Você acha que esse algoritmo de seguimento de contorno faz sentido?