Ana içeriğe geç

DivideTiles - Fayans İşleme

Genel Bakış

DivideTiles arayüzü, rekonstrüksiyon öncesinde sahneleri fayanslarla bölmek için kullanılır. Bu arayüz 2D düzenli ızgara, 3D düzenli ızgara ve bellek tabanlı uyarlanabilir fayanslanma yöntemlerini destekler, büyük ölçekli veri setlerinin işlenmesi için uygundur.

Kullanım Durumları
  • Ultra büyük ölçekli veri setleri (binlerce görüntü)
  • Bellek sınırlı işleme ortamları
  • Paralel işleme gerektiren projeler
  • Dağıtık hesaplama senaryoları

Nasıl Çalışır

Arayüz Çağrısı

Komut Satırı Çağrısı

# Yöntem 1: Ana motor üzerinden
reconstruct_full_engine.exe -reconstruct_type 4 -task_json divide_config.json

# Yöntem 2: Bağımsız fayanslanma motoru
divide_engine.exe divide_config.json

Parametre Açıklaması

  • reconstruct_type: 4 olarak sabit (DivideTiles'ı belirtir)
  • task_json: Konfigürasyon dosyası yolu

Konfigürasyon Parametreleri

Gerekli Parametreler

ParametreTipAçıklama
working_dirstringÇalışma dizini (AT sonuçlarını içermeli)
gdal_folderstringGDAL veri yolu
resolution_levelintRekonstrüksiyon hassasiyeti (1=Yüksek, 2=Orta, 3=Düşük)
divide_parametersJSONFayanslanma parametreleri
roi_for_3dJSON3D rekonstrüksiyon için ROI

Opsiyonel Parametreler

ParametreTipVarsayılanAçıklama
roi_coordinate_systemJSONWGS84ROI koordinat sistemi

Fayanslanma Parametreleri (divide_parameters)

ParametreTipVarsayılanAçıklama
divide_modeint-Fayanslanma modu: 0=2D ızgara, 1=3D ızgara, 2=bellek uyarlanabilir
tile_sizedouble-Izgara boyutu (mod 0/1 için gerekli)
target_memorydouble0Hedef bellek sınırı (GB)
reconstruct_whole_tileboolfalseTam fayansları rekonstrükte edip etmeme (sınır kırpma yok)
tile_systemJSONAT koordinat sistemiFayanslanma koordinat sistemi

Fayanslanma Modları Açıklaması

1. 2D Düzenli Izgara (divide_mode = 0)

Az arazi varyasyonu olan alanlar için uygundur:

{
"divide_mode": 0,
"tile_size": 500.0, // 500m x 500m ızgara
"tile_system": {
"type": 3,
"epsg_code": 32650 // UTM projeksiyon koordinat sistemi
}
}

2. 3D Düzenli Izgara (divide_mode = 1)

Büyük yükseklik değişimleri olan alanlar için uygundur:

{
"divide_mode": 1,
"tile_size": 300.0, // 300m x 300m x 300m küp
"tile_system": {
"type": 1 // Yerel koordinat sistemi
}
}

3. Bellek Uyarlanabilir Fayanslanma (divide_mode = 2)

Bellek sınırlarına dayalı otomatik fayanslanma:

{
"divide_mode": 2,
"target_memory": 16.0, // Fayans başına maksimum 16GB bellek
"reconstruct_whole_tile": false
}

Tam Konfigürasyon Örnekleri

Şehir Ölçeği Sahne 2D Fayanslanma

{
"working_dir": "C:/Projects/CityScale",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 0,
"tile_size": 1000.0, // 1km ızgara
"tile_system": {
"type": 3,
"epsg_code": 32650
},
"reconstruct_whole_tile": true
},
"roi_for_3d": {
"boundary": [
[500000, 2500000],
[510000, 2500000],
[510000, 2510000],
[500000, 2510000]
],
"min_z": 0,
"max_z": 500
},
"roi_coordinate_system": {
"type": 3,
"epsg_code": 32650
}
}

Dağlık Arazi 3D Fayanslanma

{
"working_dir": "C:/Projects/Mountain",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 1,
"tile_size": 500.0, // 500m küp
"tile_system": {
"type": 0, // LocalENU
"origin_point": [114.123, 22.123, 100.0]
}
},
"roi_for_3d": {
"boundary": [...],
"min_z": 100,
"max_z": 2000 // Büyük yükseklik farkı
}
}

Bellek Sınırlı Ortam

{
"working_dir": "C:/Projects/LimitedMemory",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 2,
"target_memory": 8.0, // Sadece 8GB kullanılabilir bellek
"reconstruct_whole_tile": false
},
"roi_for_3d": {
"boundary": [...]
}
}

Çıktı Sonuçları

tiles.json Dosya Yapısı

Fayanslanma sonrasında oluşturulan tiles.json:

{
"tiles": [
{
"name": "tile_0_0",
"empty": false,
"max_memory": 12.5, // GB
"roi": {
"boundary": [...],
"min_z": 100,
"max_z": 200
}
},
{
"name": "tile_0_1",
"empty": false,
"max_memory": 15.3,
"roi": {...}
}
],
"divide_mode": 0,
"tile_system": {...},
"tile_grid": { // Izgara bilgileri (mod 0/1)
"origin": [500000, 2500000],
"rows": 10,
"cols": 10
},
"tile_size": 1000.0
}

Fayanslanma Sonuçlarını Kullanma

Reconstruct3D otomatik olarak tiles.json'u okuyacak ve fayanslanmış rekonstrüksiyon gerçekleştirecektir:

{
"license_id": 9200,
"working_dir": "C:/Projects/CityScale", // tiles.json içerir
// ... diğer Reconstruct3D parametreleri
}

Fayanslanma Stratejisi Seçimi

Sahne Tipi Karşılaştırması

Sahne TipiÖnerilen ModIzgara Boyutu ÖnerisiAçıklama
Düz Şehir2D Izgara500-2000mDüz arazi, küçük yükseklik değişimleri
Dağlık Arazi3D Izgara300-1000mBüyük yükseklik farkları, dikey katmanlaşma gerekli
Karma SahneBellek Uyarlanabilir-Fayanslanma şemasını otomatik optimize et
Doğrusal Mühendislik2D IzgaraÖzelRota yönü boyunca uzun şeritler ayarla

Bellek Tahmini

Fayans başına bellek gereksinimi ≈ (Fayanstaki görüntüler × Görüntü çözünürlüğü × 3) / Sıkıştırma oranı

Referans değerler:

  • 100 adet 20MP görüntü ≈ 8-12 GB
  • 200 adet 20MP görüntü ≈ 16-24 GB

Paralel İşleme

Yerel Paralel

import subprocess
import json
import concurrent.futures

# Fayanslanma sonuçlarını oku
with open("tiles.json", "r") as f:
tiles_info = json.load(f)

def process_tile(tile):
if tile["empty"]:
return

config = {
"license_id": 9200,
"working_dir": f"./output/{tile['name']}",
"tile_name": tile["name"],
# ... diğer parametreler
}

with open(f"{tile['name']}.json", "w") as f:
json.dump(config, f)

subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "2",
"-task_json", f"{tile['name']}.json"
])

# Paralel işleme
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
executor.map(process_tile, tiles_info["tiles"])

Dağıtık İşleme

Fayanslanma sonuçları işleme için birden çok makineye dağıtılabilir:

  1. Ana düğüm fayanslamayı gerçekleştirir
  2. tiles.json ve verileri dağıt
  3. Her düğüm atanan fayansları bağımsız olarak işler
  4. Sonuçları topla

En İyi Uygulamalar

1. Fayans Boyutu Seçimi

  • Yeterli bellek: Sınır etkilerini azaltmak için daha büyük fayanslar kullan
  • Sınırlı bellek: Kararlılığı sağlamak için daha küçük fayanslar kullan
  • Paralel işleme: Fayans sayısı ile fayans başına işleme süresini dengele

2. Örtüşme Alanı İşleme

{
"reconstruct_whole_tile": true, // Tam fayanslar oluştur
// Örtüşme alanlarını son işlemede birleştir
}

3. Koordinat Sistemi Seçimi

  • 2D fayanslanma: Projektif koordinat sistemi kullan (metrik birimler)
  • 3D fayanslanma: Yerel veya LocalENU
  • Coğrafi koordinat sistemlerinde 3D fayanslamadan kaçın

4. ROI Optimizasyonu

{
"roi_for_3d": {
"boundary": [
// AT'den oluşturulan Smart ROI kullan
// Kırpmayı önlemek için sınırları uygun şekilde genişlet
]
}
}

Performans Optimizasyonu

1. İşleme Süresi Tahmini

Toplam süre = Fayanslanma süresi + max(Fayans başına işleme süresi) + Birleştirme süresi

2. Yük Dengeleme

  • max_memory dağılımını kontrol et
  • Fayanslar arasında yükü dengelemek için parametreleri ayarla
  • Dinamik görev atamasını düşün

3. Depolama Optimizasyonu

  • Çalışma dizini için SSD kullan
  • Fayans sonuçlarını birden çok disk arasında dağıt
  • Yeterli geçici alan rezerve et

Yaygın Sorunlar

S: Fayanslanma sonrasında fayans sınırlarında boşluklar var mı?

C:

  • reconstruct_whole_tile: true ayarla
  • Fayanslar arasındaki örtüşmeyi artır (ROI genişleterek)
  • Son işlemede birleştirmeyi optimize et

S: Bazı fayanslar işlemde başarısız oluyor mu?

C:

  • Fayansın max_memory'sinin sınırları aştığını kontrol et
  • Belirli fayanslardaki görüntü dağılımını gözden geçir
  • Yeniden fayanslanma veya parametre ayarlamasını düşün

S: Çok fazla fayans var mı?

C:

  • tile_size veya target_memory'i artır
  • Farklı fayanslanma modu kullan
  • Hiyerarşik işleme stratejisini düşün

İleri Uygulamalar

Özel Fayanslanma Şemaları

tiles.json'a dayalı olarak şunları yapabilirsiniz:

  1. Fayans sınırlarını manuel olarak ayarla
  2. Küçük fayansları birleştir
  3. Büyük fayansları böl
  4. Öncelikleri ayarla

Artımlı Güncellemeler

# Sadece değişen alanları işle
changed_tiles = identify_changed_areas()
for tile in changed_tiles:
process_tile(tile)

Sonraki Adımlar


İpucu: Uygun bir fayanslanma stratejisi, büyük ölçekli veri işlemenin anahtarıdır. Tam veri setlerini işlemeden önce optimal parametreleri bulmak için küçük verilerle test etmeniz önerilir.