Canny Edge Detection
A deteção de contornos de Canny é um algoritmo em várias etapas que reduz o ruído, deteta alterações acentuadas de brilho e cria mapas de contornos finos para visão computacional.
A deteção de contornos de Canny é um algoritmo de processamento de imagem em várias etapas que identifica alterações acentuadas de brilho e as converte num mapa de contornos binário e fino. Reduz o ruído, localiza transições de intensidade e liga os píxeis de contorno fiáveis em contornos. Em visão computacional, estes contornos descrevem a estrutura da imagem para análise e medição de formas.
John Canny desenvolveu o método em 1983 e descreveu-o no artigo de 1986, Uma abordagem computacional à deteção de contornos. O seu desenho equilibra três objetivos: detetar contornos reais, localizá-los com precisão e produzir uma resposta por contorno. «Detetor de contornos de Canny» é um sinónimo do algoritmo.
Como funciona a deteção de contornos de Canny#
O algoritmo combina o pré-processamento de dados com filtragem e análise de conectividade. As cinco etapas têm funções distintas:
- Redução de ruído: A suavização gaussiana calcula a média de píxeis próximos com pesos que dependem da distância, suprimindo flutuações que criariam contornos indesejados.
- Estimativa do gradiente: As derivadas horizontais e verticais medem a rapidez com que o brilho muda. A sua combinação indica a intensidade do contorno e uma direção perpendicular ao limite. O OpenCV utiliza derivadas de Sobel nesta etapa.
- Afinamento de contornos: A supressão de não máximos retém os picos locais do gradiente ao longo da direção do gradiente, produzindo cristas estreitas em vez de bandas largas.
- Limiarização dupla: Um limiar alto identifica contornos fortes; um limiar baixo elimina respostas fracas. Os píxeis entre os dois limiares tornam-se candidatos.
- Ligação por histerese: Os píxeis candidatos são mantidos quando estão ligados a um contorno forte através de outros candidatos. Os candidatos isolados são eliminados.
Limiares, suavização e modos de falha#
Os limiares atuam sobre a intensidade do gradiente, e não sobre o brilho bruto ou a confiança do modelo. Diminuí-los preserva mais detalhes e ruído; aumentá-los remove contornos fracos. Aumentar também o limiar alto reduz as sementes de contornos fortes disponíveis para a ligação por histerese.
A escala gaussiana controla uma relação de compromisso diferente. Uma suavização maior suprime o ruído, mas remove estruturas finas. No exemplo do quadrado ruidoso do scikit-image, alterar o desvio-padrão gaussiano muda a quantidade de ruído que permanece à volta do quadrado.
Na inspeção de fissuras, as superfícies de betão rugosas produzem contornos de textura indesejados e contornos de fissuras incompletos. Aumentar os limiares remove alguns contornos falsos, mas também faz perder secções genuínas das fissuras.
O Sobel estima derivadas de intensidade; o Canny combina a estimativa do gradiente com suavização, afinamento e seleção baseada em conectividade. A etapa de afinamento do Canny compara píxeis vizinhos, enquanto o NMS de deteção de objetos compara caixas previstas sobrepostas.
Deteção de contornos Canny em Python#
Instala as dependências com pip install opencv-python numpy. Este exemplo usa o OpenCV para guardar um mapa de contornos da amostra do autocarro:
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
gray = cv2.imdecode(encoded, cv2.IMREAD_GRAYSCALE)
# Suaviza a imagem antes de calcular os gradientes de intensidade.
smoothed = cv2.GaussianBlur(gray, (5, 5), 1.4)
edges = cv2.Canny(smoothed, 50, 150, L2gradient=True)
cv2.imwrite("canny_edges.png", edges)O PNG guardado mostra os contornos preservados a branco sobre um fundo preto. No fluxo de trabalho de deteção de contornos do OpenCV, o segundo e o terceiro argumentos do Canny especificam os limiares baixo e alto. L2gradient=True usa a magnitude euclidiana do gradiente; por predefinição, é usada a soma das derivadas horizontais e verticais em valor absoluto. Estas escolhas alteram os valores do gradiente e, por conseguinte, o comportamento dos limiares.
Aplicações e tarefas de visão relacionadas#
O Canny permite a extração de características geométricas: o exemplo de deteção de linhas do scikit-image aplica-o a uma fotografia de um cameraman antes de uma transformada de Hough probabilística extrair segmentos de reta. O Canny fornece píxeis de contorno; a votação de Hough agrupa-os em linhas. A deteção de objetos atribui categorias e caixas, enquanto a segmentação de instâncias atribui píxeis a objetos individuais.
A segmentação do YOLO26 da Ultralytics devolve máscaras para o isolamento de objetos, que podem selecionar regiões da imagem para processamento Canny separado. Isto combina a seleção de objetos aprendida com a extração clássica de contornos.
Na IA generativa, o ControlNet usa mapas Canny como condições espaciais para modelos de difusão. A sua implementação condicionada por Canny orienta a geração com Stable Diffusion 1.5 usando contornos extraídos juntamente com um prompt de texto.










