Hareketli Bir Nesnenin Yerinin, Hızının ve Doğrultusunun Belirlenmesi

Hareketli bir nesnenin (insan, araba vb. olabilir) nereye, hangi hız ve açıda hareket ettiğinin belirlenmesi, görüntü işleme teknikleri hızlı ve tutarlı olarak yapılabilmektedir. Bu konuya örnek olabilmesi açısından, masamda bir oyuncak robotu hareket ettirerek, kamera ile üstten bakıp fotoğraflarını aldım. 5 farklı pozisyonda aldığım bu fotoğrafları işleyerek her bir pozisyon için, bir öncekine göre hız ve açı değişimini hesapladım. (Normalde, bu işlem kameradan alınan görüntülerle canlı olarak yapılmalıdır.  İşlem mantığı tamamen aynı olacağı için, off-line yani dosyadan yüklenen resimler ile çalışıldı. HALCON kullanan herhangi biri, kamerası olmasa bile örneği çalıştırabilsin diye)

Aldığım 5 adet fotoğrafın yanyana görüntüsü aşağıdaki gibi. Kullandığım fotoğrafları buraya tıklayıp bilgisayarınıza indirebilirsiniz.

 

Gerçek hayattaki olabilecek uygulamalara benzemesi açısından, takip edeceğimiz robotun yanına, benzer renklerde engeller koydum. (Program bu engelleri eleyebilmeli) engellerin yerlerini her bir resimde değiştirdim. (Değişen arka zemin, farklı nesnelerin de görüntüye girmesi vb. durumlarda program doğru nesneyi takip edebilmeli)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hareketli oyuncak robot ve ona tepeden bakan kameranın yerleşim görüntüsü. Robotun çevresine aynı renkteparçalar koydum (sistemin kafasını karıştırabilmek için). Robot engellere takılmadan yürüyecek ve biz de kamera ile robotun hareketini izleyeceğiz.

Şimdi işin HALCON kodlamasına geçelim.

Sistemin temel mantığı ardışıl olarak alınan 2 resmi karşılaştırmak ve aradaki farkları bulmak üzerinedir. HALCON daki sub_image fonksiyonu, 2 görüntüyü birbirinden çıkarır ve fark görüntüsünü geri döndürür. Kullanılan dual_threshold fonksiyonu sayesinde, hem eski pozisyonu hem de yeni pozisyonu ayrı iki bölge olarak elde ederiz. Bundan sonrası, engellerin ve görüntüye giren beklenmeyen nesnelerin elenmesi (select_shape) ve son olarak ta bulunan sonuçların ekranda listelenmesidir. Her bir hareket için, robotun eski konumu, yeni konumu, gidilen mesafe, dönülen açı hesaplanacaktır.

Önce tam HALCON kodunu verelim.

dev_set_line_width(1)
set_display_font (3600, 12, 'mono', 'true', 'false')
gen_empty_obj(Robots)
for Index := 1 to 4 by 1
    read_image (Image1, 'C:/Users/Mustafa/Desktop/' + Index + '.bmp')
    S := Index + 1
    read_image (Image2, 'C:/Users/Mustafa/Desktop/' + S + '.bmp')
    convert_image_type (Image1, ImageConverted1, 'int2')
    convert_image_type (Image2, ImageConverted2, 'int2')

    sub_image (ImageConverted1, ImageConverted2, ImageSub, 1, 0)
    dual_threshold (ImageSub, RegionDiff, 500, 20, 10)

    closing_circle(RegionDiff, RegionClosing, 3.5)
    select_shape (RegionClosing, SelectedRegions, ['area','height'], 'and', [40000, 250], [80000, 450])
    count_obj(SelectedRegions, Number)
    if (Number = 2)
        select_obj(SelectedRegions, FirstObject, 1)
        select_obj(SelectedRegions, NextObject, 2)
        if (Index = 1)
            concat_obj(Robots, FirstObject, Robots)
        endif
        concat_obj(Robots, NextObject, Robots)
    endif
endfor
* Display islemleri
* Katedilen mesafe (pixel cinsinden) ve doğrultu (açı) yazalım
dev_display(Image2)
dev_display(Robots)
dev_set_color('yellow')
area_center(Robots, Area, Row, Column)
count_obj(Robots, Number)
for Index := 1 to Number - 1 by 1
    disp_arrow(3600, Row[Index - 1], Column[Index-1], Row[Index], Column[Index], 5)
    distance_pp(Row[Index - 1], Column[Index-1], Row[Index], Column[Index], Distance)
    angle_lx(Row[Index - 1], Column[Index-1], Row[Index], Column[Index], Angle)
    tuple_deg(Angle, Deg)
    disp_message (3600, Distance$'.3' + ' px.', 'image', Row[Index-1], Column[Index-1], 'white', 'false')
    disp_message (3600, Deg$'.2' + ' derece', 'image', Row[Index-1] + 40, Column[Index-1], 'white', 'false')
endfor

Bu kod çalıştırıldığında elde edilen ekran görüntüsü ise aşağıdaki gibi olacaktır. Robotun son 5 hareketinde, nereden nereye gittiğini ve kaç derece dönerek hareket ettiğini gözlemlemek mümkündür. Otoyollarda kullanılan Radar sistemi doppler frekansı mantığına göre çalışmakla birlikte, kamera ile yapılan hız kontrollerinde bu ve benzeri yöntemler kullanılmaktadır.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir