Hough Transform
Hough dönüşümü, görüntü kenarlarındaki boşluklara veya gürültüye rağmen çizgileri, daireleri ve şekilleri algılayan, oylama tabanlı bir bilgisayarlı görü tekniğidir.
Hough dönüşümü; görüntü noktalarının olası şekiller için oy kullanmasını sağlayarak çizgileri, daireleri ve parametrelerle tanımlanan diğer şekilleri algılayan geometrik bir özellik çıkarımı tekniğidir. Aynı yapıya ait noktalar birbirini güçlendirerek oylama tablosunda belirgin bir tepe oluşturur. Bilgisayarlı görü alanında bu teknik, boşlukları veya gürültülü sınırları olan şekillerin yeniden elde edilmesine yardımcı olur.
Paul V. C. Hough, tekniği 1959'da fizik fotoğraflarındaki parçacık izlerini ele alan Kabarcık Odası Görüntülerinin Makineyle Analizi çalışmasında tanıttı. Richard Duda ve Peter Hart, yaygın olarak kullanılan açı–mesafe gösterimini 1972 tarihli çizgi ve eğri algılama makalelerinde tanıttı.
Hough Oylaması Nasıl Çalışır?#
Tipik bir iş akışı veri ön işleme ve kenar algılama ile başlar. Bir kenar algılayıcı yerel parlaklık değişimlerini belirler; Hough dönüşümü, kenar piksellerini geometrik yapılarda gruplandırır. Sobel operatörü parlaklık gradyanlarını tahmin ederken Canny, çizgi oylamasına uygun ince bir kenar haritası oluşturur.
Her aday çizgi, görüntü başlangıç noktasına olan işaretli dik uzaklığı rho ve bu dikmenin x eksenine göre açısı theta ile temsil edilir. Bu gösterim, sonsuz eğim kullanmadan dikey çizgilerin ele alınmasını sağlar. Her kenar pikseli, akümülatör adı verilen ve parametre uzayını ayrık kutulara bölen bir tablodaki uyumlu rho–theta çiftleri için oy kullanır. Görüntüde birbirinden ayrı olsalar bile aynı doğru üzerindeki pikseller aynı kutuya katkıda bulunur. Tepeler, desteklenen çizgileri belirler.
Çıktıyı geometri ve oylama kuralları belirler. Bir derin öğrenme algılayıcısı görsel örüntüleri eğitim verilerinden öğrenir; Hough algılama ise öğrenilmiş model ağırlıkları yerine seçilen bir şekil modelini ve sayısal eşikleri kullanır.
Standart, Olasılıksal ve Daire Dönüşümleri#
Yaygın üç uygulama, arama yöntemleri ve çıktıları bakımından farklılık gösterir:
- Standart çizgi dönüşümü:
cv2.HoughLines(), sonsuz çizgileri tanımlayan rho–theta çiftlerini döndürür. Doğru parçasının uç noktalarını bulmak için ek işlem gerekir. - Olasılıksal çizgi dönüşümü:
cv2.HoughLinesP(), nokta örneklemesiyle oylama iş yükünü azaltır ve doğru parçasının uç noktalarını doğrudan döndürür.minLineLengthkısa doğru parçalarını eler;maxLineGapaynı doğrultudaki parçaların birleştirilebilmesi için aralarındaki en büyük mesafeyi belirler. - Daire dönüşümü: Daire adayları bir merkez ve yarıçap gerektirir.
cv2.HoughCircles(), yarıçap sınırlarının arama alanını daralttığı gradyan tabanlı bir yaklaşım kullanır. Girdi olarak gri tonlamalı görüntü alırken çizgi işlevleri ikili görüntü alır.
Python'da Doğru Parçalarını Algılama#
Bağımlılıkları pip install opencv-python numpy ile yükle. Bu örnekte, örnek otobüs görüntüsündeki doğru parçalarını algılamak ve çizmek için OpenCV kullanılıyor.
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)
image = cv2.imdecode(encoded, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Oylama için kenarları çıkar.
edges = cv2.Canny(gray, 50, 150)
# Akümülatör oylarıyla desteklenen sonlu doğru parçalarını algıla.
lines = cv2.HoughLinesP(
edges,
1,
np.pi / 180,
threshold=80,
minLineLength=80,
maxLineGap=10,
)
if lines is not None:
for x1, y1, x2, y2 in lines[:, 0]:
cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imwrite("hough_segments.jpg", image)Kaydedilen görüntüde, döndürülen doğru parçaları kırmızı renkle üst üste çizilir. Rho kutuları bir piksel genişliğindedir, theta kutuları bir derecelik aralıkları kapsar ve threshold=80 akümülatör oy eşiğini belirler. Doğru parçası uzunluğu ve boşluk ayarları piksel cinsinden ölçülür.
Uygulamalar ve Pratik Sınırlamalar#
Belge işlemede ızgara çizgilerini çıkarmak yapısal analizi destekler: OpenCV, Sudoku görüntüsünde Hough algılamayı gösterir. Dairesel oylama, scikit-image'ın daire ve elips örneklerinde madeni paraların merkezlerini ve yarıçaplarını bulur. Bu çıktılar geometriyi tanımlar; nesne algılama anlamsal kategoriler ekler, örnek bölütleme ise pikselleri tek tek nesnelere atar.
Çelik kiriş ölçüm prototipi, köşe çıkarımını desteklemek için YOLOv8 maskelerini, Canny kenarlarını ve olasılıksal Hough çizgilerini birleştirir. Ultralytics YOLO26 bölütleme, nesne yalıtımı için maskeler sağlar ve böylece ayrı geometrik işlemlerden önce aynı maskeli girdi yaklaşımının kullanılmasına olanak tanır.
Daha ince akümülatör kutuları bellek kullanımını artırır; kaba kutular birbirine yakın adayları birleştirir. Tablo sınırı çıkarmada eksik kenarlar algılanabilir sınırları azaltırken ilgisiz çizgiler hatalı sınır düzeltmelerine yol açabilir. maxLineGap değerini artırmak, aynı doğrultudaki parçalar arasındaki daha büyük boşlukların birleştirilmesini sağlar; minLineLength değerini artırmak ise daha kısa doğru parçalarını eler.










