Videolardan alınan örneklerden oluşan görüntü dizilerinin birleştirilerek özet kare elde edilmesi basit bir işlem olmakla birlikte çeşitli ileri uygulamaların temeli olabilir. Fizikte bir eylemin özetlenmesi, örneğin belirli açılarla fırlatılan bir topun bu eğik atış hareketindeki yörüngesinin gözlenmesi görüntü dizisi birleştirme ile sağlanabilir. Daha sonraki aşamalarda görüntü dizilerinden hareket vektörleri çıkarılarak trafik yönünün ve akış hızının belirlenmesi gibi benzer uygulamalar yapılabilir. Ancak proje konumuz kapsamında olmadığı için bu uygulama ile ilgilenmedik.

Geliştirme Aşaması
Proje kapsamında bir videodan alınan 50 karenin C ile yazılmış program ile birleştirilmesi gerekiyordu. Görüntü dosyaları üzerinde işlem yapabilmek için öncelikle yardımcı c kütüphanelerini araştırdık. Sonrasında bitmap dosyasının yapısını incelediğimizde bu işlemi yardımcı görüntü işleme kütüphaneleri olmadan da kolaylıkla yapabileceğimizi gördük. Gri tonlamalı bir bitmap dosyası 14 byte dosya başlık bilgisi, 40 byte görüntü başlık bilgisi ve her biri bir byte olan piksel değerlerinden oluşuyordu. Görüntülerin tutulacağı 2 boyutlu dizinin boyutunu dinamik olarak belirlerken bu başlık bilgisinden faydalandık. Programda kullandığımız değişkenleri çoğunlukla unsigned char türünde tanımladık. Bir byte boyutunda olan bu değişken tipi, görüntü üzerinde byte bazında yapılan işlemlerde kolaylık sağladı.

Örneklenen karelerin belirgin olması için videoları saniyede yaklaşık 8 kare çekebilen bir fotoğraf makinesiyle timelapse yöntemini kullanarak çektik. Birleştirilmiş görüntüyü elde etmede kullanılan fotoğraf sayısı arttıkça görüntünün netliğini yitirdiğini gördük. Örneğin 50 kare ile çalıştığımızda en açık beyaz piksel olan 255 bile örnek sayısı olan 50 ye bölündüğünde 5 e düşüyor ve elde edilecek görüntüde aynı konumdaki pikselle toplandığında sonuca etkisi çok büyük olmuyor. Çalıştırma örnekleri bölümünde de örnekleri bulunan elde ettiğimiz görüntüler bu durumu destekler nitelikte.

Geliştirme aşamasında yaşadığımız sıkıntılardan biri de gereksiz bellek alanı kullanımıydı. Örneklenen görüntülerin çözünürlüğünü bilmediğimizden üzerinde işlem yapılacak iki boyutlu dizi için yeterince büyük bir alan açmamız gerekiyordu ve görüntülerin bu boyutun da üzerinde bir çözünürlükte olmayacağının bir garantisi yoktu. Bu yüzden kaynak kodlarında da görülebileceği gibi iki boyutlu diziyi her bir elemanı bir satır dizisinin işaretçisi olan bir dizi şeklinde dinamik olarak tanımladık.

Görüntü dizisi birleştirmede yaşadığımız en büyük sorun örnek sayısı arttıkça hareketlinin belirginliğinin azalmasıydı. Yaptığımız işlem içerik duyarlı olmayıp basit bir ortalama alma işlemi olduğundan böyle bir sonuç almış olduk. Gelişen görüntü işleme teknikleri artık içerik duyarlı (content aware) işlemlere olanak sağlıyor. Eğer hareketli nesneyi arka plandan ayırıp, birleştirme sırasında da hareketliye daha yüksek bir katsayı, arka plana daha düşük bir katsayı verebilirsek hareketlinin belirginleşmesini sağlayabiliriz.

 

Kaynak Kodları: http://www.isikdogan.com/sourcecodes/54.html 

Çalıştırma Örnekleri
res1res2
res3res4

Not: "MATLAB'da birkaç satır kod ile yazılabilecek böylesine basit bir programı C ile yazmanızın sebebi nedir, olayı abartmanın ne alemi var?" gibi bir soru akıllara gelebilir.
Cevap: Ders Projesinde C dilini kullanmamız isteniyordu, özel bir sebebi yok :)

Işıkdoğan, Furkan, ve Zafer Sercan. "Resim Dizisi Birleştirme." Programa Dilleri I Ders Projesi. Yıldız Teknik Üniversitesi, 8 Ocak 2010

Yorumlar (0)Add Comment

Yorum Yazın
Küçült | Büyüt

security code
Lütfen resimdeki güvenlik kodunu girin


busy