Matlab Nesne Takibi

Matlab görüntü işleme konusunda da diğer birçok konuda olduğu gibi oldukça gelişmiş araçlara sahip bir programdır. Bu yazıda matlab içinde bulunan bu fonksiyonları kullanarak kameradan gerçek zamanlı nesne takibi yapan bir proje geliştireceğiz. Projenin özellikleri ise şu şekilde olacak.

  • Gerçek zamanlı takip
  • Birden fazla objenin ayırt edilebilmesi
  • Görüntüde tek bir obje varsa hareketinin (engel arkasında görünmeme durumunda) tahmini
  • Bulunan objelerin gösterilmesi

Bir nesneyi takip etmek için çeşitli görüntü işleme teknikleri birbiri ardına kullanılarak, görüntüler daha işlenebilir ve anlaşılabilir hale getirilmektedir. Bu kapsamda sırasıyla hangi işlemler yapacağımıza bakalım. Öncelikle kameradan aşağıdaki gibi bir görüntü elde ettiğimizi varsayalım ve buradan mavi renkli objeleri takip etmek istediğimizi düşünelim.

input_image

Kameradan bu görüntüyü alabilmek için yazmamız gereken kod şu şekildedir.

 Buradan mavi renkleri ayıklamak için birkaç adım gereklidir. Öncelikle 3 renk katmanından (RGB) oluşan bu resmin mavi katmanını ayıklamak ve gri katmana göre farkına bakmak bize oldukça iyi bir tahmin verecektir. Resmin mavi katmanı aşağıdaki gibidir. Bu katman data değişkeninin 3. boyutunda tutulmaktadır ve erişmek için data(:,:,3) yazılması yeterlidir. Resmin gri renkli hali için ise Matlab içinde bulunan rgb2gray() fonksiyonu kullanılabilir.

blue_layer

Daha sonra bulunan mavi ve gri katmanlar birbirinden imsubtract() fonksiyonu ile çıkartılıp, aşağıdaki fark elde edilir.

difference_layer

Bu resme “Median Filtresi” uygulanarak tuz-biber gürültüsü adı verilen karıncalanmaların giderilmesi sağlanabilir. Bu işlem 2 boyutlu median filtresi fonksiyonu olan medfilt2() fonksiyonu ile yapılabilir.

Daha sonra eşik değerine göre resim içindeki renkler ayırt edilip, resim daha kolay çalışılabilir hale getirilmiştir. Bu işlemler şöyle yapılmaktadır.

threshold_result

Dikkat edilirse burada sol alt köşeye doğru küçük bir obje vardır. Bu objenin görüntüde takip edilmesi istenmemektedir. Bu yüzden resim içindeki bağlı bileşenler bulunarak, alanı belli bir değerin altındaki objeler ayıklanabilir. Bu işlem Matlab içerisindeki bwareaopen() fonksiyonu ile kolaylıkla yapılabilir.

Şimdiye kadar yapılan işlemlerin resim üzerine eklenmesi ile elde edilen sonuç şu haldedir.

end_result

Bu işlemlere ek olarak bulunan nesnelerin kenarlarının bulunması için Canny kenar bulma yöntemi ve biraz da makyaj yapmak için bulunan sonuca dilation işlemi uygulanabilir. Bu işlemlerin sonucu ise şöyle olmaktadır.

canny_dilation_result

Ancak bu işlemlerin yapılması bilgisayarın performansına bağlı olarak gerçek zamanlı takibi olumsuz kılabilmektedir. Bu yüzden bu kısımlar projede bulunmamaktadır. Bu işlemlerden sonra bulunan objelerin işaretlenmesi, konumlarının ve hızlarının bulunması işlemi gelmektedir. Bu işlem şu şekilde yapılabilir.

Burada yapılan işlemleri kısaca özeltemek gerekirse, öncelikle regionprops() fonksiyonu ile bağlı bileşenlerin ve bu bileşenlerin istenen özelliklerinin elde edilmesi sağlanmaktadır. Daha sonra bulunan bu özelliklere göre her bir objenin alanını çevreleyen bir sınır çizilip, merkez noktası belirlenerek bu noktanın yanında cisimle ilgili bilgiler gösterilmektedir. Bu işlemlerin sonucu aşağıdaki gibidir.

multiple_object_result

Sahnede tek bir obje olması durumunda eğer obje bir engelin arkasına giriyorsa çalışan kod şu şekildedir.

Böylece cismin konumu ve hızı tahmin edilmekte, bulunan değerlere göre tahmini rotası çizilmektedir.

single_object_result

Bulunan bütün objeler ise ek bir pencerede gösterilmektedir.

objects

Son olarak ise performans sağlamak için alınan verilerin bellekten silinmesi işlemi vardır.

Döngü bittikten sonra verilerin tamamen silinmesi ise şu kodlar ile sağlanmaktadır.

Projenin bütün kodlarına ulaşmak için aşağıdaki bağlantıyı kullanabilirsiniz.

Matlab Nesne Takibi Projesi