Python ile OpenCV kullanarak Hough Doğruları Algılama

Giriş

Görsel işleme, günümüzde birçok alanda önemli bir yere sahiptir. Bilgisayarların, görüntüyü analiz ederek anlamlandırabilmesi, otomasyon sistemlerinden sağlık hizmetlerine kadar pek çok uygulama için kritiktir. Bu noktada, Hough dönüşümü gibi güçlü bir teknik, doğrudan görüntü bilgilendirmesi sağlamak amacıyla kullanılır. Hough dönüşümü, özellikle doğrusal nesnelerin (doğruların) tespit edilmesi için etkili bir yöntemdir. Bu yazıda, Python ve OpenCV kütüphanesini kullanarak Hough doğruları algılamanın temellerine değineceğiz.

OpenCV Nedir?

OpenCV, görüntü işleme ve bilgisayarla görme uygulamaları geliştirmek için kullanılan açık kaynaklı bir kütüphanedir. C++, Python ve Java dillerinde kullanılabilen bu kütüphane, farklı platformlar üzerinde çalışabilme özelliğine sahiptir. OpenCV, video analizi, yüz tanıma, nesne algılama ve daha fazlası için geniş bir araç yelpazesine sahiptir. Görüntülerin üstünde matematiksel işlemler gerçekleştirmek için mükemmel bir seçimdir.

Pek çok geliştirici ve araştırmacı tarafından tercih edilen OpenCV, etkinliği ile bilinir. Yüksek performanslı görüntü işleme yetenekleri ile hızla geliştirme yapılmasına olanak tanır. Bu yazıda, özellikle Hough doğruları algılama işlemi üzerinde duracağız ve OpenCV’nin bu uygulamalardaki rolünü değerlendireceğiz.

Hough Dönüşümü Nedir?

Hough dönüşümü, belirli bir tür geometrik şeklin (genellikle doğruların) görüntü üzerinde tespit edilmesine olanak tanır. Yöntem, parametre uzayında çalışarak, görüntüdeki kenarları temsil eden noktaları değerlendirir. Bu sayede, belirli bir açı altında eğilmiş düz çizgilerin bile tespit edilmesine olanak tanır.

Hough dönüşümünün temel mantığı, bir görüntüdeki her pikselin, bazı parametreleri göz önüne alarak bir doğruda yer alıp almadığını sorgulamasıdır. Sonuç olarak, yoğun piksel noktalarının oluşturduğu bir “kümelenme” ile belirli doğrunun varlığı ortaya konur.

Görüntü işleme uygulamalarında, Hough dönüşümü genellikle kenar tespiti ile birlikte kullanılır. Kenar tespitinin yapılmasının ardından, bu kenarların doğrusal yapılar oluşturup oluşturmadığına karar verilir, bu sayede görüntüdeki doğrunun varlığı veya yönü belirlenebilir.

OpenCV ile Hough Dönüşümünü Kullanma

OpenCV kullanarak Hough dönüşümünü uygulamak için birkaç adımı takip etmemiz gerekecek. Bu adımlar genellikle görüntünün yüklenmesi, ön işleme (gerekirse), kenar tespiti ve ardından Hough dönüşümünün uygulanması olarak sıralanabilir.

Öncelikle gerekli kütüphaneleri yüklemek önemlidir:

import cv2
import numpy as np

Sonrasında görüntüyü yükleyerek başlayabiliriz:

image = cv2.imread('görüntü_yolu.jpg')

Aşağıdaki örnekte, Hough dönüşümünü kullanmadan önce görüntü üzerinde kenar tespiti yapılacaktır. Canny algoritması üzerinden kenar tespiti gerçekleştirelim:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)

Yukarıda gösterildiği gibi, ilk önce görüntünün gri tonlamalı formata dönüştürülmesi ve ardından Canny kenar tespit algoritmasının uygulanması gerekmektedir. Elde edilen ‘edges’ matrisini kullanarak Hough dönüşümünü uygulayabiliriz.

Hough Doğruları Algılama

Hough dönüşümünü uygulamak için OpenCV’nin HoughLines fonksiyonunu kullanabiliriz. Bu yöntem, belirli parametrelerin (doğru için açılar ve mesafeler) belirlenmesiyle çalışır. Örneğin:

lines = cv2.HoughLines(edges, 1, np.pi/180, 200)

Burada 1 birim mesafeyi, np.pi/180 dönüş açısını ve 200 ise algoritmanın bir doğruyu tespit etmek için gereken toplam oylama miktarını ifade eder.

Daha sonra, tespit edilen doğruları görüntü üzerine çizebiliriz. Bu işlem için HoughLinesP fonksiyonu daha esnek bir yaklaşım sunar. Tespit edilen doğruların uç noktalarını belirleyerek daha iyi bir görsellik sağlayabiliriz:

linesP = cv2.HoughLinesP(edges, 1, np.pi/180, 100, minLineLength=100, maxLineGap=10)
if linesP is not None:
    for line in linesP:
        x1, y1, x2, y2 = line[0]
        cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)

Yukarıda, minLineLength tespit edilmesini istediğimiz minimum doğrunun uzunluğunu, maxLineGap ise doğrular arasında kabul edilebilir boşluk miktarını belirler. Böylece daha iyi bir doğruların tespiti sağlanmış olur.

Hatalı Senaryolar ve Çözümleri

Görüntü işleme boyunca bazı hatalarla karşılaşabiliriz. Örneğin, bazı kenarların tespit edilememesi veya yanlış tespitlerin yapılması gibi sorunlarla karşılaşabiliriz. Bunun en yaygın sebebi, Canny kenar tespit algoritmasında kullanılan eşik değerlerinin uygun olmamasıdır. Bu nedenle, kenar tespit sürecinde bu parametreleri dikkatlice ayarlamak önemlidir.

Ayrıca, Hough dönüşümünün ayarlarını (oy verilecek toplam sayı) değiştirerek hataların önüne geçebiliriz. Yeterince yüksek bir eşik değeri, daha az ama doğru tespitler yapmamızı sağlayabilirken, çok düşük bir eşik değeri, hatalı tespitlerin (gürültü) artmasına yol açacaktır.

İkinci bir sorun, tespit edilen doğruların sayısının çok fazla veya çok az olmasıdır. Bu, çoğu zaman parametrelerin eksik veya yanlış ayarlanmasından kaynaklanır. Doğru ayarlamalar yaparak, daha iyi sonuçlar elde edebiliriz.

Sonuç

Python ve OpenCV kullanarak Hough doğruları algılama, görüntü işleme uygulamalarında hemen hemen her yerde karşımıza çıkabilir. Hough dönüşümünün sağladığı esneklik ve güçlü algoritmalar sayesinde, karmaşık görsel verilerin analizi kolaylaştırılmaktadır. Bu yazı ile birlikte, Hough dönüşümünü nasıl kullanabileceğinizi ve temel uygulamalarını öğrendiniz.

Son olarak, edindiğiniz bilgileri kendi projelerinizde denemekten çekinmeyin. Görüntü işleme alanında yeni olanları incelemek ve öğrenmek, bu alandaki yetkinliğinizi artıracaktır. Unutmayın ki deneme yanılma süreci, en iyi öğrenme yöntemlerinden biridir!

Ek kaynaklar: OpenCV resmi dokümantasyonu ve çeşitli Python toplulukları ve forumları, uygulamalarınızı geliştirmenize yardımcı olacak ek bilgiler sunabilir.

Scroll to Top