Eu aprendi sobre vários algoritmos de detecção de borda, incluindo algoritmos como os métodos Sobel, Laplacian e Canny. Parece-me que o detector de borda mais popular é um detector de borda Canny, mas há casos em que esse não é o algoritmo ideal para usar? Como posso decidir qual algoritmo usar? Obrigado!
algorithms
image-processing
edge-detection
PearsonArtPhoto
fonte
fonte
Respostas:
Existem muitas possibilidades de detecção de borda, mas os três exemplos mencionados caem em três categorias distintas.
Sobel
Isso aproxima uma derivada de primeira ordem. Dá extremos nas posições de gradiente, 0 onde nenhum gradiente está presente. Em 1D, é =[−101]
Existem outras alternativas para Sobel, que têm +/- as mesmas características. Na página da Roberts Cross na wikipedia, você encontra uma comparação de algumas delas.
Laplace
Isso aproxima uma derivada de segunda ordem. Dá 0 nas posições de gradiente e também 0 onde nenhum gradiente está presente. Dá extrema onde um gradiente (mais longo) começa ou para.
O efeito desses 2 em diferentes tipos de arestas pode ser melhor visualizado visualmente:
Canny
Este não é um operador simples, mas é uma abordagem de várias etapas, que usa Sobel como uma das etapas. Onde Sobel e Laplace oferecem um resultado em escala de cinza / ponto flutuante, que você precisa definir como limiar, o algoritmo Canny tem o limiar inteligente como uma de suas etapas, para que você obtenha um resultado binário sim / não. Além disso, em uma borda suave, você provavelmente encontrará apenas 1 linha em algum lugar no meio do gradiente.
fonte
Enquanto Sobel e Laplacian são simplesmente filtros, Canny vai além disso de duas maneiras.
Primeiro, ele faz a supressão não máxima, que elimina o ruído produzido por todos os tipos de objetos e gradientes de cores em uma imagem. Em segundo lugar, na verdade, inclui uma etapa que permite discernir entre diferentes direções da aresta e preencher os pontos ausentes de uma linha.
Em outras palavras, o detector de borda Canny está em uma classe completamente diferente da de Sobel e Laplacian. É muito mais inteligente, pois inclui um monte de pós-processamento, enquanto Sobel e Laplacian são simplesmente saídas de filtro de alta passagem seguidas de limiar binário linear.
fonte
As duas decisões mais importantes ao tentar detectar arestas são, para mim normalmente:
Posso segmentar os objetos e usar um operador morfológico para encontrar a borda da imagem binária (segmentada)? Com dados barulhentos, isso tende a ser mais robusto.
Que filtro de suavização de preservação de bordas devo usar para reduzir o ruído da imagem? Os filtros de borda são baseados na diferenciação, que sofrerá com dados ruidosos. A escolha mais simples é o filtro mediano, mas os filtros de difusão anisotrópica ou meios não locais oferecerão melhor desempenho com o custo de ter mais parâmetros para ajustar.
Para a detecção de borda em si, não consigo pensar por um bom motivo para não usar Canny.
fonte
Abordagem SUSAN
Outra abordagem para detecção de bordas e cantos é a abordagem SUSAN .
Nesta abordagem, em vez de aproximações derivadas, é utilizada uma abordagem de aproximação integral . Isso tem a vantagem de não apenas ser capaz de detectar arestas, mas também de "recursos bidimensionais" (ou seja, cantos).
Outra vantagem de uma abordagem de aproximação integral é que o ruído tende a ter menos efeito sobre os resultados.
fonte
Canny produz uma imagem binária e depende de limites fornecidos externamente (que são dependentes de imagem / aplicativo).
Os filtros baseados em convolução produzem uma imagem de "intensidade da borda". Isso é útil se o peso ou a força da aresta forem importantes (por exemplo, na Transformada Hough ponderada).
fonte