Araç içinden kaydedilmiş videolarda titreşim giderimi
In-Car Digital Image StabilizationEmrah ÜSTÜN emrah[at]emrahustun[dot]com ÖzetçeAraçlarda sürücülere yardımcı olması açısından kullanılacak olan bir sistem bilgisayarlı seyir sistemleridir. Sistem, yol-trafik durumunu, işaretleri, tabelaları kameralarla izleyerek sürücüye uyarılarda bulunabilir. Bu işlemi zorlaştıran bir şey ise, video çekimindeki titreşimdir. Bozuk arazi koşulları veya manevralı araç kullanma gibi sebeplerden dolayı kameradan alınan görüntü aracın gerçek hareketiyle bire bir aynı olmaz. Yavaş hareketlere ek olarak hızlı titreşimler oluşur. Bu titreşimler görüntünün algılanmasını, yorumlanmasını zorlaştıracaktır. Bu çalışmada istenmeyen titreşimleri gidermek için farklı bir sayısal imge iyileştirme yöntemi denenmiştir. Kabaca yapılacak işlem; hareket vektörlerinin bulunması, hareket vektörlerindeki yüksek frekans bileşenlerinin bastırılması ve bu iyileştirilmiş hareket vektörlerinden yeni görüntü dizisinin elde edilmesi şeklinde olacak. Bu işlemlerin araç içinde taşınan bir kamerada yapılacağı göz önüne alınarak, işlem yükünün düşük olması sağlanacak şekilde algoritma oluşturulmuştur. Hareket kestirimi için temsili nokta karşılaştırma (RPM – Represantative Point Matching) algoritması kullanılmıştır. MAD (Minimum Absolute Differance) ile hareket vektörleri tespit edilmiştir. Bu yöntemle, düşük karşıtlıklı alanları geniş olan görüntülerde hatalı hareket vektörleri elde edilebilir. Bunun için ters-üçgen metoduyla güvenilirliği düşük olan hareket vektörleri yanlış kabul edilerek devre dışı bırakırız. Daha sonra hareket vektörlerinden güvenilir hareket vektörü, genel hareket vektörü elde ederiz. Alçak geçiren filtre ile de iyileştirilmiş hareket vektörünü bulup, düzeltilmiş görüntü dizisini elde edebiliriz. AbstractComputer based driving system is a methot for helping drivers. System can give notices to driver with watching road, traffic or signs. The hard part of this proccess is the shaking effect in image sequence. Because of bumpy driving or streering effects, the recorded image sequence won’t be the same with orijinal movement of the car. There will be fast shaking effects additionally to slow car movement. This shaking effects will make diffucult to watch and determine for the system. In this project, a different digital image stabilization tecnique was tried. Tpically, we will determine motion vectors. Then we will find compansated motion vectors with low pass filters. And we will generate new, compansated image sequences with this compansated motion vectors. Used algorithm was created with considering these proccesses will run on a camera in a car, so proccess cost must be low. For motion detection, RPM (Represantative Point Matching) algoritm was used. And motion vectors determined with using MAD (Minimum Absolute Differance) methot. But this methots can give wrong motion vectors in large low-contrast including image sequences. For solve this problem, we will use inverse-triange methot and deactivate unreliable motion vectors. Then, we’ll derive reliable motion vectors from motion vectors and then global motion vectors. With using low pass filter, we can derive compansated motion vectors and generate compansated image sequences. GirişGün geçtikçe makineler insanların yapmak zorunda kaldıkları işleri devralıyorlar. Bunlardan biri de şoförlük. İçinde bulunduğumuz yıllarda henüz trafik içinde kendi kendine gidebilen araçlar bulunmamakta. Bunun için ilk adımlar ise şoföre yardım eden sistemlerdir. Zamanla bu sistemler şoförün işlerini devralacaktır. Bu sistem, yol çizgilerini, tabelaları, araçları, yayaları, trafik durumunu, trafik kazalarını ve hatta uykusuz sürücüleri tespit etmek için ve sürücüye bilgi vermek trafik kazalarını azaltmak için kullanılabilir. Bu çalışmanın amacı da şoföre yardımcı olacak sistemlerin düzgün çalışması için düzgün görüntü elde etmektir. Sistem, titreşimli görüntüden yol, trafik durumunu düzgün algılayamayacaktır. Bu da şoföre yanlış uyarı verilmesine sebep olabilir ki kazaları engellemesi gereken sistem kazaya yol açmış olacaktır. O halde yapılacak ilk iş, sistemin değerlendireceği verilerin güvenli veriler olmasını sağlamaktır. Titreşim giderme birçok yöntemle yapılmaktadır. Elektronik görüntü iyileştirici, ( electronic image stabilizer - EIS ) görüntüleri iyileştirmek için, kamera hareketini algılamak için “employingmotion” algılayıcıları kullanır. Optik görüntü iyileştirici ( optical image stabilizer – OIS ) iyileştirme için, kameranın içinde titreşimin zıttı yönde hareket eden prizmayı kullanır. EIS ve OIS donanımsal bağımlılık getirdiği için, anlık uygulamaların işlemlerinde kısıtlamalar olmaktadır. Sayısal imge iyileştirme (DIS) ise jiroskop veya akıcı prizma benzeri herhangi bir mekanik aygıt kullanmadan sayısal imge işleme teknikleri kullanarak düzgünleştirilmiş imge dizileri üretmek için istenmeyen hareket etkilerini gidermektir. DIS’in ana avantajları: 1) makine bağımsızdır 2) mekanik bir ihtiyaç olmadığı için küçük donanımlarda da gerçekleştirmeye uygundur. DIS sistemi iki temel aşamadan oluşmaktadır. Hareket kestirimi ve iyileştirme kısımları. Hareket kestirimi 3 aşamadan oluşmakta. 1) Güvenilir olmayan hareket vektörlerinin kestirimi. (MV: motionvektors) 2) Güvenilir olmayan hareket vektörlerinden yanlış olması muhtemel hareket vektörlerinin elenmesi ve güvenilir hareket vektörünün elde edilmesi. 3) Güvenilir hareket vektörleri ile RMV(Refined Motion Vectors) elde edilip, düzgünleştirerek CMV (Compansated motion vectors) elde edilmesi. Daha sonra da iyileştirme kısmında CMV’leri kullanarak, eski imgelerden CMV’lerin tersine ötelemeler yaparak yeni, düzeltilmiş, imge dizilerimizi oluşturabiliriz. 2. DIS ve Hareket Kestirimi sistemi mimarisiHareket kestiriminde hatalara sebep olan bir şey, görüntü hareketinin dışında, görüntü içindeki nesnelerin hareket etmesidir. Bu sebeple hareket vektörü tespit işlemlerinde imgeleri küçük alanlara bölüp, her alan için hareket vektörünü her alan için ayrı ayrı tespit edeceğiz. İyileştirme işlemine kadar küçük alandan büyük alana doğru yayılarak işlemleri yapabiliriz. İmgemizi önce 4 eşit bölgeye ayırıyoruz. Bu bölgelerin hareket vektörleri iyileştirilmiş hareket vektörüne (RMV) kadar farklı işlenecektir. Bu şekilde farklı karşıtlıklı alanlar, hareket eden nesneler genel hareket vektörünü daha az yanıltacaktır.
Şekil 1 Bu bölgeleri de alt bölgelere ayırıyoruz. İlk hareket kestiriminde bu en küçük alt bölgelerden elde ettiğimiz hareket vektörlerinin birleşimini kullanacağız. Bölgeleri alt bölgelere ayırırken kullandığımız oranlar da işlem sayısını azaltmak için önemlidir. Bu çalışmada 256×256 piksellik imge dizileri kullanılmıştır ve 128×128 piksellik 4 tane alt bölgeye ayrılmıştır. Bir bir alt bölgenin ( rapor içinde blok ismiyle geçecektir) boyutu 33×33 piksel ve bloklar arasında 15’er piksellik boşluklar bırakılmıştır. Bu değerlere, denemeler sonucunda karar verilmiştir. Hareket kestirimi için her bir bloğun konvolüsyon hesabını RPM ile yapacağız. A - RPM ve Yerel Hareket Vektörü KestirimiHareket kestirimi işlemi bloklar içinde yapılacak. Her bölgenin blokları kendi arasında karşılaştırılacak. Bir bloğun orta noktasının o bloğun karakteristiğini kabaca barındırdığını kabul edebiliriz. Yani her bloğun temsili noktası ortasındaki piksel olacak. Yapılacak şey, her bloğun temsili noktasını, bir sonraki çerçevede aynı blok içinde aramak. Bunu yaparken bir çerçevedeki hareketin bir blok boyutundan büyük olmadığını farz ediyoruz.
Yapılacak olan matematiksel işlemi şu şekilde gösterebiliriz;
N blok numarasını, I ise piksel ışıklılık değerlerini belirtmekte. Adım adım anlatacak olursak; (t) çerçevesinde (n) inci bloğun temsili noktasından, (t-1) inci çerçevesinde (n) inci bloğun 1. pikselini mutlak olarak çıkarıyoruz. Daha sonra aynı işlemi (n+1) bloğu için de yapıyoruz. Bu şekilde bütün bloklarda temsili noktadan bir sonraki çerçevedeki blokların 1. piksellerini mutlak olarak çıkarıyoruz. Bu bizim hareket vektörünün, orta noktasının, sol üst tarafa gitme durumunu test etmiş oluyor. Eğer mutlak farkların toplamı az ise hareket vektörünün bu yönde olduğuna karar verebiliriz. Daha sonra aynı işlemleri 2. piksel için, 3. piksel için … tekrar ediyoruz. Bu şekilde (t) ve (t-1) çerçeveleri arasında bir fark matrisi bulmuş oluyoruz. Bu fark matrisindeki en düşük sayısal değer, (t) çerçevesindeki temsilci noktanın (t-1) çerçevesinde geldiği yeri gösterecektir. İşlem yükü açısından bir tek temsilci noktayı aradığımız için şöyle bir sorun yaşanabilmektedir; eğer temsilci nokta etrafında aynı ışıklılıkta pikseller, kendini tekrar eden desenler, düz alanlar (düşük kontrastlı alanlar) varsa, hareket o yönde olmasa bile oralarda fark vektörü düşük çıkacaktır ve algoritmamız hatalı hareket vektörü algılayacaktır. Bu sorun, işlem yükü azaltmak için RPM kullanılmasından kaynaklanmaktadır ve MAD aşamasında (fark matrisinden hareket kestirimi) çözümü yoktur. Bunun önüne sonradan ters-üçgen metoduyla geçilecektir. Bu sorunu görebilmek için yapılan denemeleri şöyle gösterebiliriz;
Şekil 3 Şekil 3’te imgeyi kendisinin 10 piksel yukarı ötelenmiş haliyle RPM konvolüsyonuna soktuğumuzda fark matrisi bu şekilde oluşuyor. Fark matrisi bir blok boyutunda yani 33×33 boyutunda olacaktır. Yani temsilci nokta, orta nokta, (17,17) noktasıdır. Fark matrisinin y ekseninde yandan görünümünde değerin sıfır olduğu nokta 7 görülüyor. Yani (17,7) noktasında fark sıfırdır. Bu da hareket vektörünü x yönünde 0, y yönünde +10 verecektir. Bu örnekte doğrudan imgenin kendisini ötelediğimiz için muntazam bir sonuç elde edilebildi. Ancak pratikte bu şekilde olmayacaktır. Şimdi de kontrolü zor olan imgeleri inceleyelim;
Şekil 4 Şekil 4’te çizgiler içeren bir imgeyi kendisiyle karşılaştırıyoruz. Normal bir imgede, hareket olmadığı için fark matrisinde (17,17) noktasının sıfır olması gerekir. Ancak burada kendini tekrar eden desenden dolayı birden fazla noktada sıfır değeri görülüyor. Buradan, bu şekilde desenleri olan bir görüntü dizisinde doğru bir hareket vektörü elde edilemeyeceğini görüyoruz.
Şekil 5
Şekil 6 Şekil 5 ve şekil 6’dan da görüldüğü gibi RPM yöntemiyle alınan fark matrislerinden çıkaracağımız hareket vektörleri güvenilir olmayacaktır. Sorunsuz bir fark matrisinden hareket vektörü çıkarımında iki işlem vardır. Fark matrisindeki en düşük sayısal değerin yerini bulmak ve temsilci noktanın konumu olan (17,17)’ye göre değişimini hesaplamak. Şekil 7’de iki imge arasındaki fark matrisi görülmektedir. En düşük Z değeri 48’dir ve bu değerin koordinatları, x=24, y=15’tir. Yani bu iki imge arasında hareket vektörü x yönünde +7, y yönünde -2 bulunmaktadır. Gerçekten de görsel olarak karşılaştırıldığın sağa doğru kayma ve çok az aşağı doğru kayma gözlemlenebilmektedir.
B – Bozuk durum tespiti ve ters-üçgen metoduTasarlanan algoritmaya göre, sağlam bir hareket vektörü elde edebilmek için şekil 8’deki gibi bir fark matrisi oluşması gerekmektedir. Eğer tekrar eden desenler, geniş düşük kontrastlı alanlar olmasa, yani imgede ayırt edeci özellikler fazla olsa bu şekilde keskin bir sarkıt elde edilebilir.
Şekil 8 Şekil 8’deki gibi bir fark vektöründen elde edilen hareket vektörüne kesinlikle doğru tespit edilmiştir diyebiliriz. Ancak şekil 9’daki gibi keskin bir sarkıt içermeyen fark matrislerinde durum farklı olacaktır. Yazılım bir minimum nokta bulacaktır. Ancak bu nokta gerçek hareket vektöründen farklı bir sonuç verebilir. Bu sebeple bulduğumuz her hareket vektörünün yanlış olabileceği düşüncesiyle, ters üçgen metodunu kullanırız.
Şekil 9 Ters üçgen metodu Bu tip bir fark matrisinin, tespit ettiğimiz en düşük değerini içeren tek bir satırını kesip yandan görünümüyle inceleyelim;
Şekil 10 Şekil 10’daki gibi bir kesite sahip fark matrisinde tespit edilen en düşük nokta Ti_min noktası olacaktır. Ancak ikinci sarkıtın gerçek hareket vektörü olması da muhtemeldir. Bu sebeple bu kesit üzerinde incelemeler yapıp, bazı eşik değerlere göre bulunan hareket vektörünün doğru ya da yanlış olduğuna karar vermeliyiz. Şekil 10’da, Ti_min, tespit edilen en düşük nokta, offset, eşik değerimiz (denemelerde en uygun değer 30 piksel bulunmuştur) , dxi bu iki şüpheli sarkıt arasındaki mesafe, nxi sarkıtların offset hizasındaki uzunluğu.
Yukarıdaki formüller doğrultusunda, nxi‘yi bulduktan sonra sarkıtların offset altında kalan piksel sayısı olan Sxi ’yi buluruz. Ve buradan da cost değerlerini elde ederiz. Bir hareket vektörünün geçerliliği de, o fark matrisi için bulunan x_cost ve y_cost değerlerine bağlı olacaktır. Keskin sarkıtlı bir fark matrisinde cost değeri düşük olacaktır ve hareket vektörü geçerli olacaktır. Sarkıtları keskin olmayan, şekil 9’daki gibi fark matrisleri yeterince güvenilir olmadığı için hareket vektörü geçersiz olacaktır. Karşılaştırma için bir eşik cost değerine ihtiyaç vardır. Denemeler sonucunda bu çalışmada costTH(cost thereshold)= 10 alınmıştır. Xi ve Yi bir bölgenin hareket vektörünü gösteriyor; (Xi_cost < costTH) ise Xi geçerli, (Xi_cost > costTH) ise Xi geçersiz, (Yi_cost < costTH) ise Yi geçerli, (Yi_cost > costTH) ise Yi geçersiz. Geçersiz olan hareket vektörleri sıfırlanacak, o çerçeve için o bölgede hareket sıfır kabul edilecek. Genel hareket vektörü bulunurken diğer bölgelerin hareket vektörlerine ve o bölgenin önceki çerçevelerinin hareket vektörlerine başvurulacak. C – Bozuk durumlu alanlarda RMV üretimiTers-üçgen işlemleri sonrasında güvenilir hareket vektörlerini elde etmiş oluyoruz. 4 bölge için, x ve y için olmak üzere toplam 8 adet hareket vektörü elde ettik. İmge dizisini iyileştirmek için ihtiyacımız olan şey ise bu 4 bölgenin birleşimiyle oluşan x ve y için olmak üzere 2 tane hareket vektörüdür. Aşağıdaki formüllere göre RMVleri (Refined Motion Vectors, iyileştirilmiş hareket vektörleri) elde ediyoruz.
Burada, GMVavg denilen değişken şu şekilde tespit ediliyor.
Bu çalışmanın kaynağı olan yayından farklı olarak ayrıca GMV (global motion vector, genel hareket vektörü) bulunmamış, RMV’ler doğrudan genel hareket vektörü olarak kullanılmıştır. 3. Hareket iyileştirmeA – Titreşim azaltmaSon olarak elde edilen RMV’ler imge dizisinin güvenilir hareket vektörlerini içermektedir. 3×3 piksellik bir örnek verelim.
Şekil 11’de soldaki imge (t) çerçevesi, sağdaki imge (t-1) çerçevesini temsil etsin. Kabaca, siyah zemin üzerinde beyaz bir nokta bulunmakta. İkinci çerçeve ile RPM işlemine tabi tutarsak şekil 12’deki fark matrisini elde ederiz; |255-0|,|255-0|,|255-0| … |255-255|
Şekil 12 Temsilci noktamızla karşılaştırarak hareket vektörü x= +1, y= -1 çıkacaktır. 1 çerçevelik hareket vektörü şekil 13’te grafikle gösterilmiştir.
Titreşim içeren bir imge dizisinde bu şekilde diğer çerçeveler için de ard arda eklenmiş hareket vektörleriyle oluşturulmuş grafik şekil 14’te görülmektedir.
Şekil 14 Şekil 14’teki gibi bir hareket vektöründe, düşük frekanslı değişimler genel hareketi vermektedir. Yani kameranın sürekli gördüğü alanın hareketi. Üzerindeki yüksek frekanslı bileşenler ise kamera titreşimini göstermektedir. Ki kamera hareketi çok yavaş olur, titreşim çok hızlıdır. Şekil 14’teki gibi bir hareketi x ekseni kabul edersek, sahne boyunca kamera önce sola (x eksiye gidiyor) sonra sağa, sonra tekrar sola dönerek ilk baştaki konumunu alıyor. Bu hareket üzerine binen yüksek frekans bileşenlerini bastırırsak elimizde şekil 15’teki gibi bir hareket vektörü kalacaktır.
Şekil 15 Bunun için bu çalışmada RMV’leri, çift katlı Bior filtreden geçirerek CMV’leri (compansated motion vectors – düzgünleştirilmiş hareket vektörleri) elde ettik. B- İmge dizisini geri oluşturmaİmge dizisinin iyileştirilmiş olması için hareket vektörlerinin CMV’ler olması gereklidir. Bozuk imge dizilerini kullanarak, her yeni çerçevede ilgili hareket vektörlerini (x ve y) kullanarak, hareket vektörünün tersine bir ötelemeyle düzgünleştirilmiş imge dizisini elde etmiş oluruz. Bunu yaparken çerçeve boyutundan ödün vermek gerekmektedir. Çünkü kamera titremesi sırasında, kameranın gittiği yönün aksi yönündeki alanın bilgisi elimizde yoktur. Değerlerini bilmediğimiz kısımları videodan kırparak titreşimi giderebiliriz. 4. SonuçBu çalışma “IEEE TRANSACTIONS ON SYSTEMS, MAN, AND CYBERNETICS—PART C: APPLICATIONS AND REVIEWS, VOL. 37, NO. 2, MARCH 2007” yayını referans alınarak yapılmıştır. Ters-üçgen metoduna kadar algoritma birebir aynıdır, sonrasında RMV ve CMV üretimleri benzerdir. Bahsi geçen yayındaki CMV sonrası işlemler yapılmamıştır. CMV sonrası işlemler, işlem yükünü azaltmak için kullanılan RPM konvolüsyonu algoritmasının getirdiği hatalı hareket vektörlerini bastırmak için yapılan işlemlerdir. Bu çalışmada RPM’nin getirdiği hatalı vektörleri bastırma işlemleri yapılmadığından çalışma sonunda hatalı vektörleri ters öteleme ile elde edilen imge dizisi, orijinal imge dizisindeki titreşimi gidermemiştir. 5. Kaynakça
|

Şekil 2




Şekil 7





Şekil 11
Şekil 13


14 Şubat, 2008 saat 00:55
[...] İmge işleme: Makalem çok uzun ve karmaşıktı. Bu sebeple anlatılan algoritmayı tamamen gerçekleştiremedim. 1000 satıra yakın kod yazdım. Ama %50-60 civarında tamamlamışımdır. Ve gerçekten çok emek harcadım. Raporum da burada. [...]