Alternativas à transformação Hough para detectar uma estrutura semelhante a uma grade

16

Eu tenho uma imagem que é composta de vários 'ângulos' que formam uma forma de grade:

insira a descrição da imagem aqui

Depois de algumas pesquisas, Hough parecia um bom ajuste, porque não é incomodado por quebras nas linhas. No entanto, o problema que tenho é que minhas linhas são 'gordas' e qualquer detecção de borda que eu execute (Canny neste caso) escolhe as bordas da linha e não o meio:

insira a descrição da imagem aqui

Isso significa que a transformação Hough acaba escolhendo um (ou ambos) dos 'lados' das minhas linhas de grade, e não o meio.

insira a descrição da imagem aqui

Dado que eu sei o que estou procurando (essa forma de grade, sempre na mesma orientação), existe uma maneira melhor de executar a parte de 'detecção de arestas' para me fornecer as linhas centrais ou devo procurar em um método totalmente diferente?

Benjol
fonte
Por contexto, essa grade será comparada a uma grade nominal para executar a calibração da câmera Tsai.
Benjol
"detecção de arestas que eu corro, seleciona as arestas da linha" Sim, porque a detecção de arestas converte arestas em cristas, e sua imagem está em cristas. Uma aresta é um limite entre claro e escuro.
Endolith 5/10

Respostas:

10

A Transformação Hough realmente ajudaria a pegar a Grade nesse caso. Para "afinar" as linhas, convém considerar a operação de Esqueletização

Isso produziria uma imagem como esta: Saída de esqueletização

Devido à maneira como a esqueletização funciona, ela ainda produzirá algumas linhas que parecerão irrelevantes para a grade, mas essas linhas em direção a direções "errôneas" não são muitas (pelo menos na imagem fornecida) para confundir a detecção de linha da Transformação de Hough demais e escolherá claramente os dois conjuntos principais de linhas em direções distintas. (Aqui está como a saída HT se parece:) insira a descrição da imagem aqui

Se você estiver usando o MATLAB, poderá consultar esta página de ajuda

A_A
fonte
Obrigado! Isso ajuda muito. Ainda não tenho minha licença do MATLAB, mas eu a testei usando o SimpleSkeletonization do AForge e funciona melhor ... Embora ainda não seja perfeito. Revisarei esse assunto mais tarde, quando tiver alguns dados reais para testá-los.
Benjol
Convém tentar limitar sua imagem original primeiro em um limite que pareça estar produzindo linhas de grade de gordura "ideais". O que quero dizer com ótimo é que eles estão pelo menos conectados. Isso poderia melhorar o desempenho da esqueletização, mas você teria um parâmetro extra para determinar (o limite). Talvez também valha a pena investigar como melhorar a aquisição de imagens.
A_A
sim, como eu disse, quando tiver dados reais para brincar, valerá a pena aperfeiçoar o sistema. Uma grande dúvida que tenho sobre Hough em geral é que a discretização do teta funcionará contra a precisão de sub-pixel que precisamos. (Isso, e eu não estou completamente convencido de que aberrações da lente não significa que as linhas poderiam ser curvado, não em linha reta ...)
Benjol
11

Uma alternativa à Transformação de Hough seria a Transformação de Radon ( 1 , 2 ). Uma descrição aproximada de um algoritmo para detectar uma estrutura semelhante a uma grade pode ser assim:

1. Perform Radon Transform from 0 to 180 degrees.
2. Find the two highest maxima in the angle bins.
3. For the two angles with maximal amplitude find the local maxima within the bin.
4. You can use the constraint that the maxima should have even spacing to deal with outliers.

EDIT :

Aqui está um pequeno trecho do matlab para ilustrar as etapas 1 a 3:

im = imread('grid.png');
[R, xp] = radon(im, 0:180);
imagesc(0:180, xp, R)

Resultado da Transformação Radon

plot(max(R)) % the two maxima are at 65 & 117 degrees

Máximos em todos os ângulos

plot(R(:, 65))

Máximos a 65 graus

plot(R(:,117))

Máximos a 117 graus

Para responder à sua pergunta com base nos comentários: Parece-me que, a partir da imagem de exemplo que você forneceu, esse método é mais robusto contra pequenos defeitos na grade detectada. Esqueletos raramente produzem linhas retas, o que pode ser uma desvantagem para a Transformação Hough subsequente.

bjoernz
fonte
Obrigado, você poderia me dizer em poucas palavras que vantagem você esperaria que a Radon Transform me desse, em comparação com a Hough Transform?
Benjol 25/05
@ Benjol, eu atualizei minha resposta.
bjoernz
Muito bom, muito obrigado. Assim que me der acesso ao Matlab, tentarei!
Benjol 25/05