Scale-Invariant Feature Transform (SIFT)
A Transformada de características invariante à escala (SIFT) é um algoritmo clássico que encontra pontos-chave e cria descritores de 128 valores estáveis sob alterações de escala e rotação.
A Transformada de características invariante à escala (SIFT) é um algoritmo clássico de visão computacional que encontra pontos-chave locais distintos numa imagem e descreve cada um com um vetor de 128 números que permanece praticamente igual quando a imagem é redimensionada ou rodada. A correspondência entre estes descritores permite ao software associar duas fotografias da mesma cena tiradas de diferentes distâncias e ângulos, o que possibilita juntar fotografias sobrepostas num panorama. A SIFT é uma forma de extração de características concebida manualmente, ao contrário dos mapas de características aprendidos de uma rede neuronal convolucional.
Origem e ideia central#
David Lowe, da Universidade da Colúmbia Britânica, apresentou a SIFT no artigo do ICCV de 1999 Reconhecimento de objetos a partir de características locais invariantes à escala e apresentou o tratamento completo em "Características distintivas de imagem a partir de pontos-chave invariantes à escala", publicado no International Journal of Computer Vision em 2004. As características SIFT são invariantes à escala e à rotação, e correspondem de forma robusta numa ampla gama de distorções afins, alterações do ponto de vista 3D, ruído e alterações de iluminação. O método foi patenteado, e a patente expirou em 2020. A OpenCV transferiu a SIFT do seu repositório contrib para a biblioteca principal na versão 4.4.0.
Um objeto não tem um tamanho fixo numa fotografia, por isso, um detetor tem de procurar estruturas em todos os tamanhos. A SIFT cria um espaço de escalas aplicando repetidamente desfoque gaussiano com intensidades crescentes e reduzindo a resolução em grupos chamados oitavas.
Como funciona a SIFT#
O algoritmo é executado em quatro etapas:
- Deteção de extremos no espaço de escalas: As diferenças entre níveis de desfoque vizinhos (diferença de gaussianas) aproximam um detetor de regiões salientes. Um píxel é candidato se for o máximo ou o mínimo entre os seus 26 vizinhos no espaço e na escala.
- Localização dos pontos-chave: Os candidatos são refinados até à precisão subpíxel. Os pontos de baixo contraste e os pontos situados ao longo de arestas são descartados por serem instáveis.
- Atribuição da orientação: Um histograma das direções dos gradientes locais em torno de cada ponto-chave determina uma orientação dominante, e tudo o que se segue é medido em relação a ela. Isto garante invariância à rotação.
- Construção do descritor: A vizinhança é dividida numa grelha de 4 x 4, e cada célula contém um histograma de gradientes com 8 intervalos. Isso resulta em 4 x 4 x 8 = 128 valores, normalizados para reduzir a sensibilidade à iluminação.
A correspondência compara os descritores através da distância euclidiana. O teste da razão de Lowe mantém uma correspondência apenas quando o vizinho mais próximo está claramente mais perto do que o segundo mais próximo. Uma pesquisa de k vizinhos mais próximos com k = 2 fornece ambas as distâncias.
import cv2
from ultralytics.utils import ASSETS
# Load a sample image in grayscale and a half-size copy
img = cv2.imread(str(ASSETS / "bus.jpg"), cv2.IMREAD_GRAYSCALE)
small = cv2.resize(img, None, fx=0.5, fy=0.5)
# Detect keypoints and compute 128-dimensional descriptors
sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img, None)
kp2, des2 = sift.detectAndCompute(small, None)
# Match half-size descriptors to full-size ones, then apply Lowe's ratio test
pairs = cv2.BFMatcher().knnMatch(des2, des1, k=2)
good = [m for m, n in pairs if m.distance < 0.8 * n.distance]
print(f"{len(good)} of {len(kp2)} half-size keypoints matched at full size")A contagem apresentada indica quantos pontos-chave encontrados à meia resolução são novamente reconhecidos na imagem em tamanho real, demonstrando a invariância à escala.
Aplicações#
A SIFT tornou-se a característica local padrão para tarefas de visão geométrica:
- Costura de panoramas: O método de costura automática de panoramas de Brown e Lowe (IJCV 2007) associa características SIFT entre fotografias sobrepostas e estima uma homografia para as alinhar, numa etapa de alinhamento chamada registo de imagem.
- Reconstrução 3D: Photo Tourism (Snavely, Seitz e Szeliski, 2006) associa características SIFT em fotografias turísticas e usa a geometria epipolar para recuperar as poses das câmaras e uma estrutura 3D esparsa.
- Localização de robôs: Se, Lowe e Little (2001) usaram pontos de referência SIFT para a localização e o mapeamento de robôs móveis, um precursor do SLAM visual moderno.
- Reconhecimento de instâncias: O artigo de Lowe de 2004 reconhece um comboio de brincar e uma rã numa cena desordenada e parcialmente ocluída com apenas 3 características correspondentes.
No rastreamento de objetos do Ultralytics YOLO, o BoT-SORT compensa o movimento da câmara entre fotogramas, e definir gmc_method: sift na configuração do rastreador usa correspondências SIFT para essa estimativa, em vez do fluxo ótico esparso padrão.
Comparação da SIFT com métodos relacionados#
A SIFT associa os mesmos pontos físicos entre vistas, sendo adequada para correspondências e geometria. A deteção de objetos prevê, em vez disso, a categoria e a localização dos objetos. A correspondência de modelos desliza um recorte fixo e falha quando a escala ou a rotação muda.
A SIFT é lenta em comparação com a ORB, um descritor binário apresentado por Rublee e colegas em 2011 como alternativa à SIFT e à SURF. Também tem dificuldades com superfícies sem textura e alterações muito grandes do ponto de vista, e os modelos aprendidos substituíram-na, em grande medida, no reconhecimento ao nível da categoria.
Nos testes de Lowe de 2004, rejeitar correspondências com uma razão de distância superior a 0.8 eliminou 90% das correspondências falsas e descartou menos de 5% das corretas, em imagens com alterações aleatórias de escala e rotação, 30 graus de rotação em profundidade e 2% de ruído, comparadas com 40,000 pontos-chave.










