Hough dönüşümü ile dairesel şekil tespiti

11 Aralık, 2010

Sayısal görüntülerde geometrik şekil bulmanın görüntü işlemede birçok uygulama alanı bulunmaktadır. İris bulma, plaka bulma, saha üzerinde top bulma ve benzeri uygulamalar buna örnek olarak verilebilir.

Bir kamera veya benzeri bir algılayıcı yardımı ile elde edilen görüntülerdeki şekillerin her zaman eksiksiz yer alması mümkün olmamaktadır ve şekillerdeki kopukluklar şekil tespitini zorlaştırmaktadır. Bu noktada hough dönüşümü ile görüntünün tamamının görülebilir olmadığı durumlarda da olası şekiller tespit edilebilmektedir. Bu çalışmada şekil bulmada kullanılan hough dönüşümünün dairesel şekil tespitinde kullanımı üzerinde durulmuştur.

Hough dönüşümü temelde kenarların olası geometrik şekilleri oylaması mantığı ile çalışmaktadır. Hough dönüşümü kullanılarak şekil tespiti genel olarak aşağıdaki adımlar ile özetlenebilir:

  • Kaynak görüntü üzerinde kenarlar belirlenir.
  • Bir eşikleme yöntemi kullanılarak görüntü ikili (siyah-beyaz) hale getirilir.
  • Her kenar pikseli için noktanın üzerinde olabileceği olası geometrik şekillerin polar koordinattaki değerleri kullanılan bir akümülatör matrisi üzerinde birer artırılarak her kenar pikselin olası şekilleri oylaması sağlanmış olur.
  • Akümülatör değeri en yüksek olan şekiller en çok oy alan şekiller olduklarından görüntü üzerinde bulunma veya belirgin olma olasılıkları en yüksek olmaktadır.
  • Bulunan şekiller isteğe bağlı olarak görüntü üzerine yazdırılabilir.

Bu çalışmada kaynak görüntüler üzerinde dairesel şekil arandığından kullanılan akümülatör matrisi çemberin merkezi olan [a,b] noktaları ve yarıçap değeri [r] olmak üzere üç boyuttan oluşmaktadır. Belirlenen aralıktaki yarıçap değerleri için çember merkezi çember denkleminden faydalanılarak bulunabilir.

  • r2 =  ( x – a )2 + ( y – b )2
  • x = a + r×sin(θ)
  • y = b + r×cos(θ)

Kullanılan açı değeri 0 – 2π aralığında değiştirilerek bir noktanın, yarıçapı bilinen bir çember üzerinde yer alıp almadığı tespit edilebilmektedir. Yarıçap değerinin bilinmesi durumunda çember merkezini ifade eden [a,b] değerlerinin iki boyutlu bir akümülatör matrisi üzerinde tutulması yeterli olacaktır. Yarıçap değerinin bilinmemesi veya bir aralık halinde olması durumunda ise olası yarıçap değerleri bir döngü içerisinde denenerek merkez koordinatları ve yarıçap uzunluğu boyutlarına (a,b,r) karşılık gelen akümülatör değerleri artırılarak elde edilen üç boyutlu akümülatör matrisi elde edilebilmektedir.

Uygulama

Bu uygulamada kenar belirlemede Sobel filtresi kullanılmıştır. İki boyutlu konvolüsyon ile Sobel filtresi görüntüye uygulanmış ve kenarlar belirlenmiştir. Adaptif eşikleme yöntemi kullanılarak görüntü siyah beyaz hale getirilmiştir. Olası çemberlerin yarıçap aralığı ve şekil belirlemede kullanılan akümülatör eşik değeri parametre olarak alınmıştır.

Uygulamalarda yalnızca istenen yarıçap aralığındaki çemberlerin aranması ile hem istenmeyen şekillerin bulunması önlenmiş hem de başarımda iyileştirme sağlanmıştır. Arama adımı değerinin parametrik olarak alınması ile başarım ile kesinlik arasındaki dengenin kullanıcı tarafından belirlenebilmesi sağlanmıştır. Adım değerinin yüksek verilmesi ile daha hızlı sonuçlar, düşük verilmesi ile daha kesin sonuçlar elde edilebilmektedir.

Aşağıdaki örneklerde solda orijinal görüntüler ve sağda hough dönüşümü ile çemberlerin belirlendiği görüntüler yer almaktadır. Çemberler beyaz renk ile vurgulanmıştır.

 

C programlama dili ile gerçeklenen programın çalıştırılabilir halini, kaynak kodları ve PGM formatındaki örnek görüntüleri aşağıdaki linklerden indirebilirsiniz:

[Hough Transform Demo]

[Hough Transform Kaynak Kodlar]


12 yorum yapılmış

  • ufuk diyor ki:

    Merhaba hocam. Öncelikle paylaşımlarınız için teşekkür ederim.
    Bitirme tezim için “Hough dönüşümü ile düz kenarların tespiti” konusunda çalışma yapmam gerekiyor. Bunun içinde ilk olarak Hough dönüşümünün mantığını anlamam gerekiyor :) Hough dönüşümünün mantığını ve nasıl çalıştığını falan anlatan bir makaleniz, çalışmanız vb. dökümanınız var mı ?
    Elinizde böyle bir döküman varsa paylaşabilir misiniz. Şimdiden teşekkür ederim.

    • Furkan IŞIKDOĞAN diyor ki:

      Merhabalar,
      Dairesel Hough dönüşümü ile çizgisel Hough dönüşümü arasında önemli bir fark yok. Temel mantık her noktanın olası şekiller için oy vermesi. Dairesel şekillerde akümülatör matrisinde dairelerin merkez ve yarıçaplarını (a,b,r) tutuyoruz. Çizgisel şekillerde ise çizginin orijine dik uzaklığı ve yatay eksen ile yaptığı açıyı (r,theta) tutuyoruz.

    • gökhan diyor ki:

      Merhabalar aynı şekilde benim de Hough Dönüşümü ile düz kenarların ve dairesel şekillerin tespiti konusunda bir çalışma yapmam gerekiyor.Elinizde bu konu ile ilgili Türkçe kaynak var mı? Matlab ile kodlama yapmam gerekecek.

    • Furkan Işıkdoğan diyor ki:

      Merhaba, elimde hiç Türkçe kaynak yok. “line detection with hough transform” şeklinde bir arama ile internette çok sayıda örnek bulmak mümkün.

  • olcay diyor ki:

    Merhabalar;
    çember çizdirme kısmında bir sorum olacak
    Anladığım kadarıyla [a,b] merkezli r yarı çaplı Çemberi sin ve cos kullanarak 360 derece Çizdirmişsiniz.Fakat anlamadığım bu çemberin r yarıçapını neye göre belirleyeceğiz ayrıca iristen göz bebeğini çıkarmamız gerekiyor burada bize 2. bir yarıçap gerekiyor sanırım.Bu yarı çapı da neye göre belirleyeceğiz ?
    Bu arada verdiğiniz bilgiler içinde çok teşekkür ederim :)

    • Furkan IŞIKDOĞAN diyor ki:

      Merhaba,
      Hatırladığım kadarıyla yarıçap için bir değer aralığı belirlemiştim ve bu aralıkta kalan yarıçap değerleri için algoritmayı çalıştırmıştım. İris bölütlemesi ile ilgili webde “iris segmentation” ve benzeri aramalar ile çok sayıda kaynak bulabilirsiniz.
      İyi çalışmalar…

  • murat diyor ki:

    Öncelikle böyle güzel bir çalışmayı paylaştığın için çok teşekürler.
    Acaba yarım daire yada yarım daire şekline benzeyen ancak şekilsiz olanları da detec etme imkanı varmı ?

    • Furkan IŞIKDOĞAN diyor ki:

      ilginiz için teşekkür ederim. evet hough dönüşümü ile birçok farklı şekil tespit edilebilir. yarım daire örneğini görmedim ama yapılmış çalışmalar vardır muhtemelen. arama motorlarında “circular arc detection using hough transform” veya “semicircle detection using hough transform” şeklinde aramalar faydalı sonuçlar döndürebilir.

  • Çağrı diyor ki:

    Merhaba Hocam,
    Yazınızı okudum. Gerçekten ufuk açıcı faydalı bir bilgi paylaşımı yapmışsınız. Şahsım adına teşekkür ediyorum.

  • şerife diyor ki:

    Merhaba Furkan Bey,
    Hough Dönüşümü ile dairesel şekil tespiti ile ilgili makalenizi inceledim. Çok beğendim yalnız bazı kısımları tam anlayamadım. Kaynak kodları göndermeniz mümkün mü?
    Cevap yazarsanız çok sevinirim. Şimdiden çok teşekkür ederim. Başarılarının devamını dilerim.

    • Furkan IŞIKDOĞAN diyor ki:

      Merhabalar,
      İlginiz için teşekkür ederim, kaynak kodları da konunun devamına ekledim.
      İyi çalışmalar dilerim.

Yorum yap