Como remover a remoção de Houghing de uma imagem transformada Hough?

9

Estou trabalhando com o código encontrado no Rosetta Code para criar uma transformação Hough. Agora eu quero encontrar todas as linhas em uma imagem. Para fazer isso, preciso dos valores ρ e θ de cada um dos picos no espaço Hough. Uma saída de amostra para um pentágono é assim:

Hough Space

Como posso encontrar uma única coordenada [θ, ρ] para cada um dos 'hot spots' visíveis no espaço Hough?

waspinator
fonte

Respostas:

9

Você encontra as coordenadas dos picos e, em seguida, usa o eixo para dimensioná-las em coordenadas [θ, ρ].

Dependendo de quão ruidosos são os dados, quantos falsos picos você espera e quanto tempo você tem, existem algumas maneiras de fazê-lo. O mais fácil é escolher um nível que seja um pico real, cortar todos os dados abaixo dele e, em seguida, criar um centro de gravidade em cada pico para obter seu centro.

Você também pode corroer / discar a imagem até que cada pico seja um único pixel.

Martin Beckett
fonte
11
+1 para uma resposta precisa. Como você define / calcula center of gravity?
Dipan Mehta 30/03/12
Para obter mais precisão, encontre o máximo, ajuste um parabolóide a esse ponto e seus pontos vizinhos e, em seguida, encontre o pico do parabolóide, que geralmente fica entre pixels.
endolith 30/03/12
2
@endolith - geralmente com Hough transforma, a precisão é limitada pela identificação de bordas na imagem inicial e pela 'discretização' do resultado no espaço Hough. Se você precisa de um resultado mais preciso é normal para voltar e refazer a transformação para uma gama mais limitada de [θ, ρ] coordenadas para obter uma resolução espacial mais elevada Hough em torno da solução claro que você encontrou
Martin Beckett
@DipanMehta - simplesmente somar mais (x valor de cada pixel) e (y ..), em seguida, divida pelo X, Y largura da caixa que você está procurando - mas ver comentário a endolith
Martin Beckett
2

Você pode localizar os máximos locais para um determinado raio. Por exemplo, você escaneia a imagem Hough, obtendo picos como máximos somente quando eles são máximos em uma janela .3×3

O segundo passo pode ser refinar a posição de pico com precisão de sub-pixel. Isso pode ser feito por encaixe de parábola.

Suponha que o valor na imagem Hough seja onde é a posição 2D. Agora você gostaria de encontrar um vetor de correção que maximize . Isso pode ser escrito usando a expansão Taylor:x p f ( x + p )f(x)xpf(x+p)

f(x+p)f(x)+pTf(x)+12pTf(x)+p

O vetor de correção é então

p=f(x)1f(x)

As derivadas podem ser calculadas a partir da imagem de Hough por diferenciação finita .

Observe que é uma matriz Hessian é um vetor de 2 (gradiente horizontal e vertical); portanto, também é um vetor de 2 que especifica uma mudança de sub-pixel para obter posição precisa do maximizador local.f(x)2×2f(x)p

A equação acima pode ocasionalmente gerar mudanças de mais de 1 pixel. Nesse caso, a vizinhança do maximizador não possui uma forma parabólica e talvez você não queira fazer a correção ou deve mesmo abandonar o maximizador candidato.

Libor
fonte
0

Existe uma técnica muito boa desenvolvida em meados dos anos 80 por Gerig e Klein. É um procedimento de backmapping que analisa o espaço Hough para identificar o ponto mais provável associado a cada ponto da aresta e depois constrói um segundo espaço Hough, em que o mapeamento dos pontos da aresta para os parâmetros é um para um, em vez de um para muitos. é o primeiro estágio usual. Eu não tenho a referência em mãos, mas olhe no artigo de revisão seminal de Hough, de Illingworth e Kittler (sobre 1987?)

útil
fonte