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.
- 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
Parametre | Tip | Açıklama |
---|---|---|
working_dir | string | Çalışma dizini (AT sonuçlarını içermeli) |
gdal_folder | string | GDAL veri yolu |
resolution_level | int | Rekonstrüksiyon hassasiyeti (1=Yüksek, 2=Orta, 3=Düşük) |
divide_parameters | JSON | Fayanslanma parametreleri |
roi_for_3d | JSON | 3D rekonstrüksiyon için ROI |
Opsiyonel Parametreler
Parametre | Tip | Varsayılan | Açıklama |
---|---|---|---|
roi_coordinate_system | JSON | WGS84 | ROI koordinat sistemi |
Fayanslanma Parametreleri (divide_parameters)
Parametre | Tip | Varsayılan | Açıklama |
---|---|---|---|
divide_mode | int | - | Fayanslanma modu: 0=2D ızgara, 1=3D ızgara, 2=bellek uyarlanabilir |
tile_size | double | - | Izgara boyutu (mod 0/1 için gerekli) |
target_memory | double | 0 | Hedef bellek sınırı (GB) |
reconstruct_whole_tile | bool | false | Tam fayansları rekonstrükte edip etmeme (sınır kırpma yok) |
tile_system | JSON | AT koordinat sistemi | Fayanslanma 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 Mod | Izgara Boyutu Önerisi | Açıklama |
---|---|---|---|
Düz Şehir | 2D Izgara | 500-2000m | Düz arazi, küçük yükseklik değişimleri |
Dağlık Arazi | 3D Izgara | 300-1000m | Büyük yükseklik farkları, dikey katmanlaşma gerekli |
Karma Sahne | Bellek Uyarlanabilir | - | Fayanslanma şemasını otomatik optimize et |
Doğrusal Mühendislik | 2D Izgara | Özel | Rota 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:
- Ana düğüm fayanslamayı gerçekleştirir
- tiles.json ve verileri dağıt
- Her düğüm atanan fayansları bağımsız olarak işler
- 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
veyatarget_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:
- Fayans sınırlarını manuel olarak ayarla
- Küçük fayansları birleştir
- Büyük fayansları böl
- Ö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
- Fayanslanmış rekonstrüksiyon için Reconstruct3D'i öğren
- Daha fazla işleme tekniği için Temel Kavramlar'ı kontrol et
İ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.