Explore o algoritmo SIFT. Saiba o que é o SIFT e as suas poderosas funcionalidades para visão computacional invariante à escala. Melhore o seu processamento de imagens.

Explore o algoritmo SIFT. Saiba o que é o SIFT e as suas poderosas funcionalidades para visão computacional invariante à escala. Melhore o seu processamento de imagens.
Hoje em dia, muitos dos dispositivos inteligentes que utilizamos, desde telefones e câmaras a sistemas domésticos inteligentes, vêm com soluções de IA que podem reconhecer rostos, objectos e até cenas visuais inteiras. Esta capacidade provém da visão por computador, um domínio da inteligência artificial que permite às máquinas compreender e interpretar imagens e vídeos.
Por exemplo, se tirar uma fotografia da Torre Eiffel de qualquer ângulo ou distância, o seu dispositivo pode reconhecê-la utilizando a visão por computador e organizá-la na pasta correta da sua galeria. Embora isto pareça simples, o reconhecimento de objectos nem sempre é simples. As imagens podem ter um aspeto muito diferente consoante o seu tamanho, ângulo, escala ou iluminação, o que torna difícil para as máquinas identificá-las de forma consistente.
Para ajudar a resolver este problema, os investigadores desenvolveram um algoritmo de visão por computador chamado Scale Invariant Feature Transform, ou SIFT. Este algoritmo permite detetar objectos em diferentes condições de visualização. Criado por David Lowe em 1999, o SIFT foi concebido para encontrar e descrever pontos-chave únicos numa imagem, tais como cantos, arestas ou padrões que permanecem reconhecíveis mesmo quando a imagem é redimensionada, rodada ou iluminada de forma diferente.
Antes de os modelos de visão computacional baseados na aprendizagem profunda, como o Ultralytics YOLO11, se tornarem populares, a SIFT era uma técnica amplamente utilizada na visão computacional. Era uma abordagem padrão para tarefas como o reconhecimento de objectos, em que o objetivo é identificar um item específico numa fotografia, e a correspondência de imagens, em que as fotografias são alinhadas encontrando caraterísticas de imagem sobrepostas.
Neste artigo, vamos explorar o SIFT com uma visão geral rápida do que é, como funciona a um nível elevado e porque é importante na evolução da visão por computador. Vamos começar!
Numa imagem, um objeto pode aparecer de muitas formas diferentes. Por exemplo, uma caneca de café pode ser fotografada de cima, de lado, sob luz solar intensa ou sob um candeeiro quente. A mesma caneca também pode parecer maior quando está perto da câmara e mais pequena quando está mais afastada.
Todas estas diferenças fazem com que ensinar um computador a reconhecer um objeto seja uma tarefa complicada. Esta tarefa de visão por computador, conhecida como deteção de objectos, exige que os modelos de IA de visão identifiquem e localizem objectos com precisão, mesmo quando o seu tamanho, ângulo ou condições de iluminação mudam.
Para que tal seja possível, a visão por computador baseia-se num processo designado por extração ou deteção de caraterísticas. Em vez de tentar compreender toda a imagem de uma só vez, um modelo procura caraterísticas de imagem distintas, tais como cantos afiados, padrões únicos ou texturas que permanecem reconhecíveis em todos os ângulos, escalas e condições de iluminação.
Em particular, foi para isso que o Scale Invariant Feature Transform, ou SIFT, foi concebido. A SIFT é um algoritmo de deteção e descrição de caraterísticas que pode identificar de forma fiável objectos em imagens, independentemente da forma como são capturados.
O algoritmo SIFT tem algumas propriedades importantes que o tornam útil para o reconhecimento de objectos. Uma das principais propriedades é a chamada invariância de escala. Isto significa que o SIFT pode reconhecer várias partes de um objeto, quer este pareça grande e esteja perto da câmara, quer seja pequeno e esteja longe. Mesmo que o objeto não seja completamente visível, o algoritmo consegue identificar os mesmos pontos-chave.
Para tal, utiliza um conceito denominado teoria do espaço de escala. Em termos simples, a imagem é desfocada em diferentes níveis para criar várias versões. Em seguida, o SIFT analisa estas versões para encontrar padrões e detalhes que se mantêm inalterados, independentemente das alterações de tamanho ou nitidez da imagem.
Por exemplo, um sinal de trânsito fotografado a alguns metros de distância parecerá muito maior do que o mesmo sinal capturado à distância, mas a SIFT consegue detetar as mesmas caraterísticas distintivas. Isto permite fazer corresponder corretamente as duas imagens, mesmo que o sinal apareça a escalas muito diferentes.
Os objectos nas imagens também podem aparecer rodados, por vezes até de cabeça para baixo. O SIFT lida com isso através de uma propriedade chamada invariância de rotação. Para cada ponto-chave que detecta, o algoritmo atribui uma orientação consistente com base nos gradientes locais da imagem. Desta forma, o mesmo objeto pode ser reconhecido independentemente da sua rotação.
Pode pensar nisto como marcar cada ponto-chave com uma pequena seta que mostra a direção para onde está virado. Ao alinhar as caraterísticas com estas orientações, o SIFT garante que os pontos-chave correspondem corretamente, mesmo quando o objeto é rodado. Por exemplo, um ponto de referência capturado numa fotografia de paisagem pode ser identificado corretamente mesmo que outra fotografia seja tirada com a câmara inclinada num ângulo.
Para além do tamanho e da rotação, as imagens também podem mudar de outras formas, como alterações na iluminação. A iluminação de um objeto pode passar de clara a fraca, o ângulo da câmara pode mudar ligeiramente ou a imagem pode ficar desfocada ou com ruído.
O SIFT foi concebido para lidar com este tipo de variações. Fá-lo concentrando-se em pontos-chave que são distintos e de elevado contraste, uma vez que estas caraterísticas são menos afectadas por alterações na iluminação ou pequenas mudanças no ponto de vista. Como resultado, a SIFT tende a ser mais fiável do que os métodos simples de deteção de arestas ou cantos, que muitas vezes falham quando as condições mudam.
Considere-se um quadro numa galeria. Pode ser reconhecido quer seja fotografado sob uma luz diurna suave, sob luzes artificiais brilhantes ou mesmo com um ligeiro desfoque de movimento de uma câmara portátil. Os pontos-chave permanecem suficientemente estáveis para uma correspondência exacta, apesar destas diferenças.
De seguida, vamos ver como funciona o algoritmo SIFT. Este processo pode ser dividido em quatro etapas principais: deteção de pontos-chave, localização de pontos-chave, atribuição de orientação e descrição de pontos-chave.
O primeiro passo é encontrar e detetar pontos-chave, que são pontos distintivos na imagem, tais como cantos ou alterações acentuadas na textura, que ajudam a localizar ou reconhecer um objeto.
Para garantir que esses potenciais pontos-chave possam ser reconhecidos em qualquer tamanho, o SIFT constrói o que é chamado de espaço de escala. Trata-se de uma coleção de imagens criada através da desfocagem gradual da imagem original com um filtro Gaussiano, que é uma técnica de suavização, e agrupando os resultados em camadas chamadas oitavas. Cada oitava contém a mesma imagem com níveis crescentes de desfocagem, enquanto a oitava seguinte é uma versão mais pequena da imagem.
Ao subtrair uma imagem desfocada de outra, o SIFT calcula a Diferença de Gaussianas (DoG), que destaca as áreas onde o brilho muda acentuadamente. Estas áreas são escolhidas como pontos-chave candidatos porque permanecem consistentes quando a imagem é ampliada ou reduzida.
Nem todos os pontos-chave candidatos são úteis porque alguns podem ser fracos ou instáveis. Para os aperfeiçoar, o SIFT utiliza um método matemático denominado Expansão da série de Taylor, que ajuda a estimar a posição exacta de um ponto-chave com maior precisão.
Durante este passo, os pontos não fiáveis são removidos. Os pontos-chave com pouco contraste, que se misturam com o ambiente, são eliminados, bem como os que se encontram diretamente nas arestas, uma vez que podem deslocar-se com demasiada facilidade. Este passo de filtragem deixa para trás apenas os pontos-chave mais estáveis e distintos.
Uma vez identificados os pontos-chave estáveis, a SIFT torna-os invariantes à rotação, o que significa que podem continuar a ser correspondidos mesmo que a imagem seja virada de lado ou de cabeça para baixo. Para tal, o SIFT analisa a forma como o brilho muda em torno de cada ponto-chave, o que é conhecido como gradiente. Os gradientes mostram a direção e a força da alteração na intensidade do pixel e, em conjunto, captam a estrutura local em torno do ponto.
Para cada ponto-chave, o SIFT considera os gradientes dentro de uma região circundante e agrupa-os num histograma de orientações. O pico mais alto neste histograma indica a direção dominante da mudança de intensidade, que é então atribuída como a orientação do ponto-chave. Tanto as direcções do gradiente, que mostram onde a intensidade está a mudar, como as magnitudes do gradiente, que indicam a intensidade dessa mudança, são utilizadas para construir este histograma
Se existirem outros picos que sejam quase tão fortes, o SIFT atribui várias orientações ao mesmo ponto-chave. Isto evita a perda de caraterísticas importantes quando os objectos aparecem em ângulos invulgares. Ao alinhar cada ponto-chave com a sua orientação, a SIFT garante que os descritores gerados no passo seguinte permanecem consistentes.
Por outras palavras, mesmo que duas imagens do mesmo objeto sejam rodadas de forma diferente, os pontos-chave alinhados com a orientação continuarão a corresponder corretamente. Este passo é o que dá ao SIFT a sua forte capacidade de lidar com a rotação e torna-o muito mais robusto do que os anteriores métodos de deteção de caraterísticas.
A última etapa do SIFT consiste em criar uma descrição de cada ponto-chave para que este possa ser reconhecido noutras imagens.
O SIFT consegue isto olhando para uma pequena área quadrada à volta de cada ponto-chave, com cerca de 16 por 16 pixéis de tamanho. Esta área é primeiro alinhada com a orientação do ponto-chave para que a rotação não a afecte. A área é então dividida numa grelha de 4 por 4 quadrados mais pequenos.
Em cada pequeno quadrado, o SIFT mede a forma como o brilho muda em diferentes direcções. Estas alterações são armazenadas numa coisa chamada histograma, que é como um gráfico que mostra quais as direcções mais comuns. Cada quadrado recebe o seu próprio histograma e, em conjunto, os 16 quadrados produzem 16 histogramas.
Finalmente, estes histogramas são combinados numa única lista de números, 128 no total. Esta lista é designada por vetor de caraterísticas e funciona como uma impressão digital para o ponto-chave. Como capta a textura e a estrutura únicas à volta do ponto, esta impressão digital permite fazer corresponder o mesmo ponto-chave em diferentes imagens, mesmo que sejam redimensionadas, rodadas ou iluminadas de forma diferente.
Agora que compreendemos melhor o que é a SIFT e como funciona, vamos explorar algumas das suas aplicações reais na visão por computador.
Uma das principais utilizações da SIFT é o reconhecimento e a deteção de objectos. Isto implica ensinar um computador a reconhecer e localizar objectos em imagens, mesmo quando os objectos não têm sempre o mesmo aspeto. Por exemplo, a SIFT pode detetar um livro, independentemente de estar perto da câmara, mais longe ou rodado num ângulo.
A razão pela qual isto funciona é que a SIFT extrai pontos-chave que são altamente distintos e estáveis. Quando estes pontos-chave são emparelhados com descritores SIFT, formam caraterísticas SIFT, que fornecem uma forma fiável de fazer corresponder o mesmo objeto em imagens diferentes. Estas caraterísticas captam detalhes únicos do objeto que permanecem consistentes, permitindo uma correspondência fiável de caraterísticas entre imagens, mesmo quando o tamanho, posição ou orientação do objeto muda.
Antes de a aprendizagem profunda se tornar popular, o SIFT era um dos métodos mais fiáveis para criar sistemas de reconhecimento de objectos. Foi amplamente utilizado em investigação e aplicações que exigiam a correspondência de objectos em grandes conjuntos de dados de imagens, apesar de exigir frequentemente recursos computacionais significativos.
A SIFT também pode ser utilizada para criar imagens panorâmicas, que são fotografias amplas obtidas através da junção de várias imagens. Utilizando a SIFT, os pontos-chave distintos são encontrados nas partes sobrepostas de diferentes imagens e, em seguida, combinados uns com os outros. Estas correspondências actuam como âncoras, orientando o processo de junção sobre a forma como as fotografias devem ser alinhadas.
Uma vez concluída a correspondência, podem ser utilizados algoritmos de costura para calcular o alinhamento correto, utilizando frequentemente transformações geométricas que mapeiam uma imagem para outra. As imagens são depois misturadas de modo a que as costuras desapareçam. O resultado final é um panorama sem costuras que parece uma única fotografia ampla, apesar de ter sido criada a partir de várias fotografias.
Outra aplicação interessante da SIFT é a reconstrução 3D, em que várias fotografias 2D tiradas de diferentes ângulos são combinadas para construir um modelo tridimensional. A SIFT funciona encontrando e combinando os mesmos pontos nessas imagens.
Uma vez efectuadas as correspondências, as posições 3D desses pontos podem ser estimadas utilizando a triangulação, um método que calcula a profundidade a partir de diferentes pontos de vista. Este processo faz parte da estrutura a partir do movimento (SfM), uma técnica que utiliza várias imagens sobrepostas para estimar a forma 3D de uma cena, juntamente com as posições das câmaras que tiraram as fotografias.
O resultado é normalmente uma nuvem de pontos 3D, uma coleção de pontos no espaço que delineia o objeto ou o ambiente. A SIFT foi uma das primeiras ferramentas que tornou prática a estrutura a partir do movimento. Embora as técnicas mais recentes sejam mais rápidas e mais comuns atualmente, a SIFT continua a ser aplicada quando a precisão é mais importante do que a velocidade.
O SIFT também tem sido utilizado na robótica, nomeadamente no SLAM (Simultaneous Localization and Mapping) visual. O SLAM permite que um robô descubra onde se encontra e, ao mesmo tempo, construa um mapa do que o rodeia.
Os pontos-chave SIFT funcionam como pontos de referência fiáveis que um robô pode reconhecer em todos os fotogramas, mesmo quando a iluminação ou os ângulos mudam. Ao seguir estes pontos de referência, o robô pode estimar a sua posição e atualizar o seu mapa em tempo real. Embora os detectores de caraterísticas mais rápidos sejam utilizados com mais frequência na robótica atual, a SIFT desempenhou um papel importante nos primeiros sistemas SLAM e continua a ser fundamental nos casos em que a robustez é mais importante do que a velocidade.
Embora o algoritmo SIFT tenha sido amplamente utilizado na visão por computador e seja conhecido por ser um método fiável, também tem algumas desvantagens. É por isso que é importante pesar os seus prós e contras antes de decidir se é o mais adequado para um projeto. De seguida, vamos analisar os seus principais pontos fortes e limitações.
Eis alguns dos prós da utilização do algoritmo SIFT:
Eis alguns dos contras da utilização do algoritmo SIFT:
Ao explorar os prós e os contras da SIFT, poderá reparar que muitas das suas limitações abriram caminho a técnicas mais avançadas. Especificamente, as redes neurais convolucionais (CNN) surgiram como uma alternativa poderosa.
Uma CNN é um tipo de modelo de aprendizagem profunda inspirado na forma como o sistema visual humano funciona. Processa uma imagem por camadas, começando por padrões simples, como arestas e texturas, e aumentando gradualmente até formas e objectos mais complexos. Ao contrário das regras de caraterísticas artesanais do SIFT, as CNNs aprendem representações de caraterísticas diretamente a partir dos dados.
Esta aprendizagem baseada em dados significa que as CNN podem superar a SIFT em tarefas de correspondência e classificação de descritores. As CNN são também mais expressivas e robustas, adaptando-se melhor à variabilidade e complexidade dos dados visuais.
Por exemplo, os modelos baseados em CNN obtiveram resultados revolucionários no ImageNet, um enorme conjunto de dados de referência que contém milhões de imagens rotuladas em milhares de categorias. Concebido para testar a capacidade dos algoritmos para reconhecer e classificar objectos, o ImageNet é capaz de realçar a diferença entre os métodos baseados em caraterísticas mais antigos e a aprendizagem profunda.
As CNNs ultrapassaram rapidamente a SIFT ao aprenderem representações muito mais ricas e flexíveis, permitindo-lhes reconhecer objectos sob iluminação variável, a partir de diferentes pontos de vista e mesmo quando parcialmente ocultos, cenários em que a SIFT tem frequentemente dificuldades.
O algoritmo Scale Invariant Feature Transform ocupa um lugar importante na história da visão por computador. Proporcionou uma forma fiável de detetar caraterísticas mesmo em ambientes em mudança e influenciou muitos dos métodos utilizados atualmente.
Embora as técnicas mais recentes sejam mais rápidas e mais eficientes, o SIFT lançou as bases para elas. O SIFT mostra onde o progresso atual na visão por computador começou e destaca o quão longe os sistemas de IA de ponta chegaram.
Junte-se à nossa comunidade global e consulte o nosso repositório GitHub para saber mais sobre visão computacional. Explore as nossas páginas de soluções para descobrir inovações como a IA na agricultura e a visão computacional no retalho. Consulte as nossas opções de licenciamento e comece a criar o seu próprio modelo de visão por computador.