Como detectar e corrigir linhas quebradas ou formas em um bitmap?
-
22-07-2019 - |
Pergunta
Eu quero encontrar um algoritmo que pode encontrar linhas quebradas ou formas em um bitmap. considere uma situação em que eu tenho um bitmap com apenas duas cores, costas e brancos (As imagens usadas em livros para colorir), há algumas curvas e linhas que devem ser conectados uns aos outros, mas devido a alguns erros de digitalização, pedaços brancos sentar vez de negros. Como devo detectá-los? (Após este trabalho, quero bitmaps converter em arquivo vetorial. Eu quero trabalhar com o algoritmo potrace).
Se você tem alguma idéia, por favor me avise.
Solução
Aqui está um algoritmo simples para curar pequenas lacunas:
Em primeiro lugar, usar um filtro que cria um pixel preto quando qualquer um de seus oito vizinhos é preto. Isto irá aumentar o seu esboço geral.
Em seguida, use um filtro de afinamento que remove o contorno extra, mas deixa as lacunas preenchidas sozinho.
Consulte este artigo para alguns filtros e parâmetros: Image Processing Lab em C #
Outras dicas
A abordagem mais simples é usar uma técnica chamada morfológica fechando . Isso só funcionará se os espaços nas linhas são muito pequenos em relação ao quão perto as diferentes linhas são uns com os outros.
Como você escolhe o elemt estruturação para realizar o fechamento também pode tornar o desempenho melhor ou pior.
O artigo da Wikipedia é muito teórica (ou matemática), de modo que você pode querer voltar para o Google ou qualquer livro sobre Processamento de Imagem para obter uma melhor explicação de como ele é feito.
Transformada de Hough pode ajudá-lo. Bônus: você recebe os parâmetros de linhas para o seu arquivo vetorial
.