Sentetik bir engelin tren yaklaştıkça yerinde durup doğal büyümesi için ekrana değil sahneye bağlanması gerekir. Bu yazıda bunu kamera kalibrasyonu olmadan, yalnızca raylardan ve zemindeki noktaların hareketinden nasıl hesapladığımızı anlatıyoruz: türetme, hattı sınamak için kullandığımız etiketsiz testler ve yöntemin işe yaramadığı durumlar. Hattın bütününü ve bu altyapıyla neler yapabildiğimizi gerçek kabin videosunda sentetik engel üretim hattı sayfasında anlatıyoruz. Bu bir Ar-Ge çalışmasıdır: sentetik verinin sahadaki tespit başarısına katkısını henüz ölçmedik ve bu yazıda böyle bir sayı yok.

Ekrana yapıştırılan engelin üç belirtisi

İlk denemelerimizde engeli ekrana göre yerleştirdik: "görünen rayın yüzde altmışı", "karenin şu satırı" gibi. Sonuç, her denemede tekrar eden üç hataydı:

  • Engel yerinde durmuyor. Tren ilerledikçe ray kareden akar, ama ekrana bağlı nokta aynı yerde kalır; engel rayın üzerinde kayar.
  • Engel doğal büyümüyor. Gerçek bir cisim yaklaştıkça giderek hızlanan bir tempoyla büyür; ekrana bağlı engelin boyutu ya sabit kalır ya da elle verilmiş bir eğriyi izler.
  • Engel trenle birlikte geliyor. Kameraya göre sabit duran bir nesne, sahnede trenle aynı hızda ilerleyen bir nesnedir.

Üçünün kök nedeni aynıdır: engelin konumu ekran uzayında tanımlanmıştır. Model bu verilerle eğitilirse gerçekte olmayan bir hareketi öğrenir. Çözüm, engeli bir kez sahneye koymak ve her karede nerede, hangi boyutta görüneceğini geometriden hesaplamaktır.

Tek durum değişkeni: ufka uzaklık

Düz bir zemin, yerden h yüksekliğinde duran ve odak uzaklığı f piksel olan bir kamera düşünelim. Zemindeki bir noktanın görüntüdeki satırı y, ufuk çizgisinin satırı y_ufuk ise:

q = y − y_ufuk = f·h / Z        ⇒        1/q = Z / (f·h)

Ufka piksel cinsinden uzaklığın tersi, noktanın gerçek uzaklığıyla (Z) doğru orantılıdır. İki ray arasındaki mesafe G olduğunda, Z uzaklığındaki ray açıklığının görüntüdeki genişliği de aynı değişkene bağlanır:

ray_açıklığı_px = G·f / Z = (G / h) · q = m · q

Ray açıklığı satıra göre doğrusal değişir ve ufukta sıfıra iner. Ego-path'in satır satır genişliğine bir doğru uydurduğumuzda doğrunun sıfır noktası ufuk satırını (y_ufuk), eğimi ölçeği (m) verir. f ile h'yi ayrı ayrı bilmek gerekmez. Kamera yere doğru eğik baksa da bu ilişkiler, sabitleri değişerek doğrusal kalır; önemli olan eğimin klip boyunca değişmemesidir.

Engel boyutunu da aynı birimde tanımlıyoruz: 1,0 bir ray açıklığı demektir. Ray açıklığı biriminde s büyüklüğündeki bir engel, tabanının bulunduğu satırda s · m · q piksel yüksekliğinde görünür. Standart hat (1.435 mm) ile dar hat arasında fark yoktur; hesap metreyi hiç görmez.

Böylece bir engelin karedeki bütün durumu tek bir değişkene iner: tabanının ufka uzaklığı q. Yanal konumu ego-path koridorundan, boyutu s · m · q ifadesinden gelir.

Kat edilen yolu KLT ile ölçmek: f, h ve hız neden sadeleşiyor?

Tren Δs kadar ilerlediğinde zemindeki her noktanın uzaklığı aynı miktarda azalır. İlk denklemden:

Δ(1/q) = −Δs / (f·h)

Bu değişim bütün zemin noktaları için aynıdır; noktanın ne kadar uzakta olduğuna bağlı değildir. Zemindeki izlenebilir noktaları KLT (Kanade–Lucas–Tomasi) izleyicisiyle kareden kareye takip ediyor, her noktanın 1/q değişimini ölçüyor ve medyanını alıyoruz. Kümülatif toplam, birimsiz bir yol ölçüsüdür:

u(t) = s(t) / (f·h)
1/q_engel(t) = 1/q_engel(0) − u(t)

Engelin derinliği aynı birimde güncellendiği için f, h ve tren hızı hesaptan düşer. Yöntem bu yüzden kalibrasyon bilgisi olmayan kabin videolarında da çalışır.

Parametrelemeyi de buna göre seçtik: engeli "şu karede belirsin" diye değil, "tren şu karede ona ulaşsın" diye tanımlıyoruz. Ulaşma anında 1/q = 0 olduğundan 1/q_engel(0), ulaşma karesindeki u değerine eşittir. Engel ilk kareden itibaren ufukta birkaç piksel olarak zaten vardır ve kesintisiz büyür; "birden belirme" sorunu yapısal olarak ortadan kalkar. Engelin kadrajın altından çıkması da ayrıca kodlanmaz: 1/q sıfıra yaklaşırken q büyür ve engel alttan taşar.

Ego-path ve etiketsiz alt-bant testi

Bütün bu hesap, engelin doğru hatta konmasına dayanır. İlk sürümde hat alanını klasik görüntü işlemeyle, doku tabanlı bir maskeyle bulduk; komşu hat ve paralel bir çakıl yol bulunan kliplerde maske sık sık yanlış yere oturdu. Şimdi hat alanını her karede TEP-Net modeliyle, trenin kendi hattının koridoru (ego-path) olarak çıkarıyoruz.

Hangisinin doğru olduğunu elle etiketlemeden ölçmek için bir geometrik zorunluluk kullanıyoruz: kamera trenin üstünde olduğu için ego hat kareyi alttan, ortaya yakın terk etmek zorundadır. Koridorun alt %10 bandının yatay merkezi kare genişliğinin 0,35–0,65 aralığının dışına düşüyorsa, maske büyük olasılıkla komşu hatta ya da yola oturmuştur.

Komşu hat ve paralel çakıl yol içeren bir kabin önü klibinin (3600×2338, H.264) 1672 karesinde iki yöntemi aynı ölçütle karşılaştırdık:

Yöntem Bant dışı kare Ardışık kareler arası en büyük merkez sıçraması
Klasik CV (doku maskesi) %62,6 0,112
TEP-Net ego-path %0 0,0076

Sıçrama, kare genişliğinin oranı olarak verilmiştir. Ölçümü Ağustos 2026'da yaptık, 26 Eylül 2026'da aynı sonuçla tekrarladık. Test artık her klip için bir kalite kapısıdır: bant dışı kare oranı %5'i, en büyük sıçrama 0,05'i ya da rayın alt banda inmediği kare oranı %5'i aşan klip engel üretimine alınmaz.

Test etiket gerektirmez, ama sınırı da bu tasarımdan gelir: yalnızca koridorun alt ucunu sınar, uzak kısmın doğru hatta olup olmadığını söylemez.

Doğrulama: 1/yükseklik zamanda doğrusal olmalı

Sabit hızla yaklaşılan durağan bir cismin uzaklığı zamanla doğrusal azalır. Görüntüdeki yükseklik uzaklıkla ters orantılı olduğundan 1/yükseklik de zamanla doğrusal değişmelidir. Ekrana yapıştırılan engel bu testten geçemez: boyutu ya sabittir ya da keyfi bir eğriyi izler.

İkinci bir klipte, 960 karelik ve sekiz sınıfın her birinden bir engel içeren bir doğrulama sahnesi ürettik. Her engel için, yüksekliği 10 piksel ve üzerinde olan karelerde 1/yükseklik değerini kare numarasına karşı bir doğruya uydurduk (26 Eylül 2026). R² değerleri 0,985 ile 0,996 arasında çıktı; en düşük değer, kadrajda en kısa süre kalan ve en az büyüyen engelde (kaya) görüldü.

Bu sonucu doğru okumak gerekir. Engelin boyutu ölçülen ego-hareketten hesaplandığı için test bir iç tutarlılık testidir: engelin, ölçülen harekete göre durağan bir cisim gibi büyüdüğünü gösterir. Engelin konumunu gerçek bir cisimle karşılaştırmaz. Tren belirgin biçimde hızlanır ya da yavaşlarsa değer düşer, çünkü o durumda doğru beklenti de doğrusal değildir.

Etiket: görünen alfa, örtülme ve kadraj taşması

Segmentasyon modeli poligon ister; kutu etiketler eğitim seti kurucumuzdan geçmiyordu. Etiketi, engel sahneye yerleştirildikten sonra görünen alfa maskesinden YOLO-Seg poligonu olarak çıkarıyoruz. Engeller uzaktan yakına çizilir; yakındaki bir engelin örttüğü kısım uzaktakinin etiketine girmez.

Eski kuralda tek bir görünürlük eşiği vardı: engelin görünen kısmı toplam alanının %35'inin altına inince etiket düşüyordu. Kadrajın dışına taşan kısım da "görünmüyor" sayıldığından, tren engele en çok yaklaştığında, yani modelin engeli en çok görmesi gereken anda etiket kayboluyordu. Yeni kural iki durumu ayırır: %35 eşiği yalnızca başka bir engelin arkasında kalan kısma uygulanır; kadrajdan taşma etiketi düşürmez ve görünen parça 10 pikselden küçük olmadıkça engel etiketlenir.

Aynı doğrulama sahnesinde, yüksekliği 10 piksel ve üzerinde olduğu hâlde etiketsiz kalan engel örneklerini (engel × kare) saydık: eski kuralda 96, yeni kuralda 11. Eski kuraldaki 96 örneğin hepsi engellerin kadrajdan çıktığı son karelerdeydi. Kalan 11 örnek, her engelin kadrajı tamamen terk etmeden önceki son bir-iki karesidir: görünen parça 10 pikselin altındadır ve bilerek etiketlenmez.

Sınırlar: bu yöntem ne zaman kullanılmamalı?

  • Düz zemin varsayımı. Hesap zeminin düz bir düzlem olduğunu varsayar. Sert eğim değişimlerinde (tepe, çukur) 1/q ile uzaklık arasındaki doğrusallık bozulur ve engel yanlış hızla büyür.
  • Görünmeyen ray. Ego-path modeli rayları görmeden koridor çıkaramaz. Tamamen kar altında kalmış ray ve tünel içi bu yüzden kalite kapısında elenir.
  • Kamera pozunun değişmesi. İlişkiler kameranın eğiminin klip boyunca sabit kaldığını, KLT medyanı da izlenen noktaların çoğunun durağan zemin olduğunu varsayar. Belirgin sarsıntı ya da kadrajı dolduran hareketli bir nesne bu varsayımları zorlar.
  • Gece ve termal kamera. Bu çalışmanın kapsamı dışındadır.
  • Model lisansı. Ego-path için kullandığımız TEP-Net'in kodu MIT lisanslıdır, ama yayınlanan ağırlıkları CC BY-NC-SA 4.0 (ticari olmayan) lisansıyla dağıtılır. Ticari bir projede ego-path modelinin, lisansı uygun veriyle yeniden eğitilmesi gerekir.

Sık sorulan sorular

Ray açıklığından derinlik hesabı neden kalibrasyon gerektirmiyor?

Ufuk satırı ve ölçek, ego-path'in satır satır genişliğinden çıkar: genişlik satıra göre doğrusal değişir ve ufukta sıfıra iner. Kat edilen yol da f·h biriminde ölçülür; engelin derinliği aynı birimde güncellendiği için f, h ve tren hızı hesaptan düşer.

Ego-path testi neden etiket gerektirmiyor?

Kamera trenin üstünde olduğundan ego hat kareyi alttan ve ortaya yakın terk etmek zorundadır. Bu geometrik zorunluluk bir yer gerçeği gibi kullanılır: alt bandın merkezi ortadan uzaklaştığında maskenin yanlış hatta oturduğu anlaşılır. Sınırı, yalnızca koridorun alt ucunu sınamasıdır.

1/yükseklik neden zamanla doğrusal değişmeli?

Görüntüdeki yükseklik uzaklıkla ters orantılıdır; sabit hızla yaklaşılan bir cismin uzaklığı da zamanla doğrusal azalır. Bu yüzden 1/yükseklik zamanla doğrusal değişir. Tren belirgin biçimde hızlanır ya da yavaşlarsa beklenti de doğrusal olmaz; testin bir iç tutarlılık testi olarak okunmasının nedeni budur.

Kadrajdan çıkan engel neden hâlâ etiketleniyor?

Çünkü tren engele en çok o karelerde yaklaşır ve modelin engeli en çok o anda tanıması gerekir. Örtülme eşiği yalnızca başka bir engelin arkasında kalan kısma uygulanır; kadrajdan taşma etiketi düşürmez. Görünen parça 10 pikselin altına indiğinde örnek bilerek etiketsiz bırakılır.