Canny Edge Detection
Canny kenar algılama, gürültüyü azaltan, keskin parlaklık değişimlerini algılayan ve bilgisayarlı görü için ince kenar haritaları oluşturan çok aşamalı bir algoritmadır.
Canny kenar algılama, parlaklıktaki keskin değişimleri belirleyip bunları ince, ikili bir kenar haritasına dönüştüren çok aşamalı bir görüntü işleme algoritmasıdır. Gürültüyü azaltır, yoğunluk geçişlerini bulur ve güvenilir kenar piksellerini konturlara bağlar. Bilgisayarlı görü alanında bu konturlar, şekil analizi ve ölçüm için görüntü yapısını tanımlar.
John Canny yöntemi 1983'te geliştirdi ve 1986 tarihli Kenar Algılamaya Hesaplamalı Bir Yaklaşım makalesinde açıkladı. Yöntem üç hedef arasında denge kurar: gerçek kenarları algılamak, bu kenarların konumunu doğru belirlemek ve her kenar için tek bir yanıt üretmek. "Canny kenar algılayıcısı", algoritmanın eş anlamlısıdır.
Canny Kenar Algılama Nasıl Çalışır#
Algoritma, veri ön işlemeyi filtreleme ve bağlantılılık analiziyle birleştirir. Beş aşamanın her biri farklı bir görevi yerine getirir:
- Gürültü azaltma: Gauss yumuşatma, yakındaki piksellerin değerlerinin mesafeye bağlı ağırlıklarla ortalamasını alarak istenmeyen kenarlar oluşturabilecek dalgalanmaları bastırır.
- Gradyan kestirimi: Yatay ve dikey türevler, parlaklığın ne kadar hızlı değiştiğini ölçer. Bu ölçümlerin birleşimi, kenar gücünü ve sınıra dik yönü verir. OpenCV bu aşamada Sobel türevlerini kullanır.
- Kenar inceltme: Maksimum olmayanların bastırılması, gradyan yönündeki yerel gradyan tepelerini koruyarak geniş bantlar yerine ince sırtlar oluşturur.
- Çift eşikleme: Yüksek eşik güçlü kenarları belirler; düşük eşik zayıf tepkileri eler. Eşikler arasındaki pikseller aday olarak değerlendirilir.
- Histerezis bağlantısı: Aday pikseller, diğer adaylar üzerinden güçlü bir kenara bağlı olduklarında korunur. Bağlantısız adaylar elenir.
Eşikler, Yumuşatma ve Hata Durumları#
Eşikler, ham parlaklığa ya da model güvenine değil, gradyan şiddetine uygulanır. Eşik değerlerini düşürmek daha fazla ayrıntıyı ve gürültüyü korurken yükseltmek zayıf sınırları ortadan kaldırır. Yüksek eşiği yükseltmek, histerezis bağlantısı için kullanılabilir güçlü kenar başlangıçlarının sayısını da azaltır.
Gauss ölçeği farklı bir ödünleşimi kontrol eder. Daha fazla yumuşatma gürültüyü bastırır ancak ince yapıları ortadan kaldırır. scikit-image'ın gürültülü kare örneğinde, Gauss standart sapmasının değiştirilmesi karenin çevresinde ne kadar gürültünün kaldığını değiştirir.
Çatlak incelemesinde, pürüzlü beton yüzeyler istenmeyen doku kenarlarına ve tamamlanmamış çatlak konturlarına yol açar. Eşiklerin artırılması bazı sahte kenarları ortadan kaldırırken gerçek çatlak bölümlerinin de kaybolmasına neden olur.
Sobel, yoğunluk türevlerini tahmin eder; Canny ise gradyan tahminini yumuşatma, inceltme ve bağlantı tabanlı seçimle birleştirir. Canny'nin inceltme aşaması komşu pikselleri karşılaştırırken nesne algılamadaki NMS örtüşen tahmin kutularını karşılaştırır.
Python'da Canny Kenar Algılama#
Bağımlılıkları pip install opencv-python numpy ile yükle. Bu örnek, otobüs örneğinin kenar haritasını kaydetmek için OpenCV kullanır:
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)
# Yoğunluk gradyanlarını hesaplamadan önce görüntüyü yumuşat.
smoothed = cv2.GaussianBlur(gray, (5, 5), 1.4)
edges = cv2.Canny(smoothed, 50, 150, L2gradient=True)
cv2.imwrite("canny_edges.png", edges)Kaydedilen PNG, korunan kenarları siyah arka plan üzerinde beyaz olarak gösterir. OpenCV kenar algılama iş akışında Canny'nin ikinci ve üçüncü bağımsız değişkenleri düşük ve yüksek eşikleri belirtir. L2gradient=True, Öklid gradyan büyüklüğünü kullanır; varsayılan yöntem ise yatay ve dikey türevlerin mutlak değerlerinin toplamını kullanır. Bu tercihler gradyan değerlerini ve dolayısıyla eşik davranışını değiştirir.
Uygulamalar ve İlgili Görsel Algılama Görevleri#
Canny, geometrik özellik çıkarımını destekler: scikit-image'ın çizgi algılama örneği, olasılıksal Hough dönüşümü düz çizgi parçalarını çıkarmadan önce Canny'yi bir kameraman fotoğrafına uygular. Canny kenar piksellerini sağlar; Hough oylaması bunları çizgiler halinde gruplandırır. Nesne algılama kategoriler ve kutular atarken örnek bölütleme pikselleri tek tek nesnelere atar.
Ultralytics YOLO26 bölütlemesi, nesne yalıtımı için maskeler döndürür; bu maskeler, ayrı Canny işlemleri için görüntü bölgelerini seçebilir. Bu yaklaşım, öğrenilmiş nesne seçimini klasik sınır çıkarımıyla birleştirir.
Üretken yapay zekâ alanında ControlNet, difüzyon modelleri için uzamsal koşullar olarak Canny haritalarını kullanır. Canny koşullu uygulaması, çıkarılan hatları bir metin istemiyle birlikte kullanarak Stable Diffusion 1.5 üretimine yön verir.










