Chamfer Distance
A distância de Chamfer mede o grau de correspondência entre conjuntos de pontos, superfícies 3D ou contornos de objetos, dando suporte à reconstrução, à segmentação e ao treinamento de modelos.
A distância de Chamfer mede o grau de correspondência entre dois conjuntos de pontos e é calculada com base na distância entre cada ponto e o vizinho mais próximo no outro conjunto. Valores menores indicam maior correspondência. Em visão computacional, ela compara nuvens de pontos 3D — conjuntos de coordenadas espaciais amostradas — e contornos de objetos 2D. A ordem dos pontos é irrelevante, e os conjuntos podem conter quantidades diferentes de pontos.
Sua origem está no chamfer matching, apresentado por H. G. Barrow, J. M. Tenenbaum, R. C. Bolles e H. C. Wolf em 1977 para comparar formas representadas por curvas em imagens. Em CAD mecânico, um chanfro é uma aresta biselada cujas dimensões descrevem uma característica física.
Como a distância de Chamfer é calculada#
Para dois conjuntos de pontos não vazios, A e B, uma definição comum baseada na distância ao quadrado tem três etapas:
- Encontre o vizinho mais próximo em B para cada ponto de A, calcule o quadrado da distância euclidiana e tire a média desses valores.
- Repita o processo de B para A.
- Some as duas médias direcionais.
A primeira direção penaliza pontos previstos distantes da superfície de referência; a direção inversa penaliza regiões de referência ausentes na previsão. Isso usa a mesma operação de vizinho mais próximo que fundamenta os k vizinhos mais próximos, com um vizinho por consulta. A implementação de Chamfer do PyTorch3D oferece suporte a cálculos bidirecionais e unidirecionais.
O uso de distâncias ao quadrado ou sem o quadrado, bem como de reduções por soma ou média, altera a pontuação. Outra convenção comum calcula a média das duas médias direcionais, resultando em metade do valor da soma delas. Portanto, a convenção de distância, as unidades das coordenadas e a normalização fazem parte da definição da métrica em um experimento.
Este cálculo com PyTorch usa torch.cdist para calcular distâncias euclidianas par a par:
import torch
a = torch.tensor([[0.0, 0.0], [2.0, 0.0]])
b = torch.tensor([[0.0, 0.0], [3.0, 0.0]])
# Reduce squared distances in each nearest-neighbor direction.
distances = torch.cdist(a, b, p=2)
squared_distances = distances.square()
a_to_b = squared_distances.min(dim=1).values.mean()
b_to_a = squared_distances.min(dim=0).values.mean()
chamfer = a_to_b + b_to_a
print(f"Squared Chamfer distance: {chamfer.item():.2f}")A saída é 1.00: cada média direcional é 0.50. Conjuntos de pontos idênticos produzem zero.
Perda de Chamfer no treinamento de modelos#
Perda de Chamfer é a distância de Chamfer usada como função de perda. Uma rede neural prevê coordenadas de pontos, e a retropropagação fornece gradientes que os aproximam dos pontos de referência. A seleção do vizinho mais próximo torna o objetivo diferenciável por partes: dentro de uma região em que as associações permanecem fixas, as distâncias ao quadrado fornecem gradientes para as coordenadas.
Uma aplicação fundamental é a Rede de Geração de Conjuntos de Pontos (PSGN), de Haoqiang Fan, Hao Su e Leonidas J. Guibas, apresentada no CVPR 2017. Ela usa a distância de Chamfer como objetivo de treinamento para a reconstrução 3D a partir de uma única imagem, prevendo a nuvem de pontos de um objeto com base em uma fotografia. Esse objetivo baseado em conjuntos de pontos permite o aprendizado sem correspondências ponto a ponto predefinidas.
Aplicações em reconstrução e segmentação#
Na reconstrução 3D, a distância de Chamfer compara superfícies previstas amostradas com a geometria de referência. Ela também dá suporte ao ajuste de malhas: os vértices são otimizados para que as amostras da malha se aproximem das amostras-alvo. No ajuste de uma malha de esfera para golfinho, otimizar apenas a perda de Chamfer produz uma superfície irregular; a regularização de arestas, normais e Laplaciano restringe a estrutura local da malha.
Na segmentação de instâncias, a distância de Chamfer mede a divergência espacial entre contornos previstos amostrados e contornos anotados. A segmentação do Ultralytics YOLO26 expõe as coordenadas dos polígonos por meio de Masks.xy, fornecendo conjuntos de pontos para a avaliação externa de contornos baseada em Chamfer. Ao contrário da Interseção sobre União, baseada em área, a distância entre contornos expressa o afastamento entre eles.
Medidas relacionadas e interpretação da pontuação#
Três conceitos relacionados ajudam a esclarecer o que a pontuação mede:
- Distância de Hausdorff usa a maior discrepância entre vizinhos mais próximos, enfatizando a pior incompatibilidade entre contornos ou superfícies.
- Distância do transportador da Terra encontra um transporte de custo mínimo que preserva a massa entre distribuições, associando pontos dos dois conjuntos.
- Distância de Chamfer sensível à densidade trata da amostragem local irregular. O Chamfer comum permite que vários pontos compartilhem um único vizinho mais próximo, de modo que agrupamentos densos podem apresentar erros pequenos apesar da falta de uniformidade na amostragem.
A densidade da amostragem, o alinhamento e o pré-processamento de dados afetam, portanto, as comparações. A distância sem elevar ao quadrado usa a unidade das coordenadas; a distância ao quadrado usa essa unidade ao quadrado. Converter as duas nuvens de metros para centímetros multiplica a distância de Chamfer sem elevar ao quadrado por 100 e a distância de Chamfer ao quadrado por 10.000.










