Ana içeriğe geç

Yeniden Yapılandırma Kalite Raporu

Genel Bakış

MipMapEngine SDK, yeniden yapılandırma görevlerini tamamladıktan sonra cihaz bilgileri, yeniden yapılandırma verimliliği, parametre ayarları ve sonuç kalitesini içeren ayrıntılı bir kalite raporu oluşturur. Rapor JSON formatında report/report.json dosyasına kaydedilir ve hızlı önizleme için görselleştirme küçük resimleriyle birlikte gelir.

Rapor Yapısı

1. Cihaz Bilgileri

Yeniden yapılandırma için kullanılan donanım yapılandırmasını kaydeder:

AlanTürAçıklama
cpu_namestringCPU adı
gpu_namestringGPU adı

Örnek:

{
"cpu_name": "Intel(R) Core(TM) i9-10900K CPU @ 3.70GHz",
"gpu_name": "NVIDIA GeForce RTX 3080"
}

2. Yeniden Yapılandırma Verimliliği

Her aşama için işleme süresini kaydeder (dakika cinsinden):

AlanTürAçıklama
feature_extraction_timefloatÖzellik çıkarma süresi
feature_match_timefloatÖzellik eşleştirme süresi
sfm_timefloatDemet ayarlama süresi
at_timefloatToplam AT süresi
reconstruction_timefloatToplam yeniden yapılandırma süresi (AT hariç)

Örnek:

{
"feature_extraction_time": 12.5,
"feature_match_time": 8.3,
"sfm_time": 15.2,
"at_time": 36.0,
"reconstruction_time": 48.6
}

3. Yeniden Yapılandırma Parametreleri

Görev giriş parametrelerini ve yapılandırmayı kaydeder:

Kamera Parametreleri

"initial_camera_parameters": [
{
"camera_name": "DJI_FC6310",
"width": 5472,
"height": 3648,
"id": 0,
"parameters": [3850.5, 2736, 1824, -0.02, 0.05, 0.001, -0.001, 0.01]
}
]

Parametre dizisi sırası: [f, cx, cy, k1, k2, p1, p2, k3]

  • f: Odak uzaklığı
  • cx, cy: Ana nokta koordinatları
  • k1, k2, k3: Radyal bozulma katsayıları
  • p1, p2: Teğetsel bozulma katsayıları

Diğer Parametreler

AlanTürAçıklama
input_camera_countintGiriş kamera sayısı
input_image_countintGiriş görüntü sayısı
reconstruction_levelintYeniden yapılandırma seviyesi (1=Ultra yüksek, 2=Yüksek, 3=Orta)
production_typestringÜrün türü
max_ramfloatMaksimum RAM kullanımı (GB)

Koordinat Sistemi Bilgileri

"production_cs_3d": {
"epsg_code": 4326,
"origin_offset": [0, 0, 0],
"type": 2
}

Koordinat sistemi türleri:

  • 0: LocalENU (Yerel Doğu-Kuzey-Yukarı)
  • 1: Local (Yerel koordinat sistemi)
  • 2: Geodetic (Jeodezik koordinat sistemi)
  • 3: Projected (Projeksiyon koordinat sistemi)
  • 4: ECEF (Dünya Merkezli-Dünya Sabit)

4. Yeniden Yapılandırma Sonuçları

AT Sonrası Kamera Parametreleri

Optimize edilmiş kamera iç parametrelerini kaydeder:

"AT_camera_parameters": [
{
"camera_name": "DJI_FC6310",
"width": 5472,
"height": 3648,
"id": 0,
"parameters": [3852.1, 2735.8, 1823.6, -0.019, 0.048, 0.0008, -0.0009, 0.009]
}
]

Görüntü Konum Farkları

Her görüntü için konum optimizasyonunu kaydeder:

"image_pos_diff": [
{
"id": 0,
"pos_diff": 0.125
},
{
"id": 1,
"pos_diff": 0.087
}
]

Kalite Metrikleri

AlanTürAçıklama
removed_image_countintAT sonrası kaldırılan görüntüler
residual_rmsefloatGörüntü noktası kalıntı RMSE
tie_point_countintBağlantı noktası sayısı
scene_areafloatSahne alanı (metrekare)
scene_gsdfloatYer örnekleme mesafesi (metre)
flight_heightfloatUçuş yüksekliği (metre)
block_countintYeniden yapılandırma blok sayısı

5. Diğer Bilgiler

AlanTürAçıklama
sdk_versionstringSDK sürümü

Görselleştirme Küçük Resimleri

Rapor dizinindeki thumbnail klasörü aşağıdaki görselleştirme dosyalarını içerir:

1. Kamera Kalıntı Grafiği

camera_{id}_residual.png - 24 bit renkli görüntü

  • İyi kalibrasyon sonucu: Kalıntılar tüm konumlarda benzer boyutta ve rastgele yönlerde
  • Kötü kalibrasyon sonucu: Belirgin yönsel desenlerle büyük kalıntılar
ipucu

Büyük kalıntılar mutlaka düşük genel doğruluğu göstermez, çünkü bu sadece kamera iç doğruluğunu yansıtır. Nihai doğruluk, kontrol noktası koordinat doğruluğunu ve model kalitesini kapsamlı bir şekilde dikkate almalıdır.

2. Örtüşme Haritası

overlap_map.png - 8 bit gri tonlamalı görüntü

  • Piksel değer aralığı: 0-255
  • Örtüşme dağılımını göstermek için renk haritası olarak işlenebilir
  • Uçuş yolu tasarımı ve görüntü kapsama kalitesini değerlendirmek için kullanılır

3. Ölçüm Alanı Küçük Resmi

rgb_thumbnail.jpg - 32 bit renkli görüntü

  • Hızlı proje önizlemesi için
  • Ölçüm alanı kapsamını ve yeniden yapılandırma sonuçlarını gösterir

Rapor Yorumlama Örnekleri

Tam Rapor Örneği

{
"cpu_name": "Intel(R) Core(TM) i9-10900K CPU @ 3.70GHz",
"gpu_name": "NVIDIA GeForce RTX 3080",
"feature_extraction_time": 12.5,
"feature_match_time": 8.3,
"sfm_time": 15.2,
"at_time": 36.0,
"reconstruction_time": 48.6,
"initial_camera_parameters": [{
"camera_name": "DJI_FC6310",
"width": 5472,
"height": 3648,
"id": 0,
"parameters": [3850.5, 2736, 1824, -0.02, 0.05, 0.001, -0.001, 0.01]
}],
"input_camera_count": 1,
"input_image_count": 156,
"reconstruction_level": 2,
"production_type": "all",
"production_cs_3d": {
"epsg_code": 4326,
"origin_offset": [0, 0, 0],
"type": 2
},
"production_cs_2d": {
"epsg_code": 3857,
"origin_offset": [0, 0, 0],
"type": 3
},
"max_ram": 28.5,
"AT_camera_parameters": [{
"camera_name": "DJI_FC6310",
"width": 5472,
"height": 3648,
"id": 0,
"parameters": [3852.1, 2735.8, 1823.6, -0.019, 0.048, 0.0008, -0.0009, 0.009]
}],
"removed_image_count": 2,
"residual_rmse": 0.68,
"tie_point_count": 125840,
"scene_area": 850000.0,
"scene_gsd": 0.025,
"flight_height": 120.5,
"block_count": 1,
"sdk_version": "3.0.1"
}

Kalite Değerlendirme Metrikleri

Mükemmel Kalite Standartları

  • residual_rmse < 1.0 piksel
  • removed_image_count / input_image_count < %5
  • tie_point_count > 10000
  • Ortalama konum farkı < 0.5 metre

Dikkat Gerektiren Durumlar

  • residual_rmse > 2.0 piksel: Olası sistematik hatalar
  • removed_image_count > %10: Görüntü kalitesi veya örtüşme sorunları
  • tie_point_count < 5000: Yetersiz özellik noktaları, doğruluğu etkiler

Rapor Analiz Araçları

Python Analiz Örneği

import json
import numpy as np

def analyze_quality_report(report_path):
with open(report_path, 'r', encoding='utf-8') as f:
report = json.load(f)

# Verimlilik metriklerini hesapla
total_time = report['at_time'] + report['reconstruction_time']
images_per_minute = report['input_image_count'] / total_time

# Kalite metriklerini hesapla
removal_rate = report['removed_image_count'] / report['input_image_count']
avg_pos_diff = np.mean([item['pos_diff'] for item in report['image_pos_diff']])

# Analiz raporu oluştur
analysis = {
'efficiency': {
'total_time_minutes': total_time,
'images_per_minute': images_per_minute,
'area_per_hour': report['scene_area'] / (total_time / 60)
},
'quality': {
'residual_rmse': report['residual_rmse'],
'removal_rate_percent': removal_rate * 100,
'avg_position_diff_meters': avg_pos_diff,
'tie_points_per_image': report['tie_point_count'] / report['input_image_count']
},
'scale': {
'area_sqm': report['scene_area'],
'gsd_cm': report['scene_gsd'] * 100,
'flight_height_m': report['flight_height']
}
}

return analysis

# Kullanım örneği
analysis = analyze_quality_report('report/report.json')
print(f"İşleme verimliliği: {analysis['efficiency']['images_per_minute']:.1f} görüntü/dakika")
print(f"Ortalama kalıntı: {analysis['quality']['residual_rmse']:.2f} piksel")
print(f"Yer çözünürlüğü: {analysis['scale']['gsd_cm']:.1f} cm")

Kalite Raporu Görselleştirme

import matplotlib.pyplot as plt
from PIL import Image

def visualize_quality_report(report_dir):
# Rapor verilerini oku
with open(f'{report_dir}/report.json', 'r') as f:
report = json.load(f)

# Grafikleri oluştur
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 1. Zaman dağılımı pasta grafiği
times = [
report['feature_extraction_time'],
report['feature_match_time'],
report['sfm_time'],
report['reconstruction_time']
]
labels = ['Özellik Çıkarma', 'Özellik Eşleştirme', 'Demet Ayarlama', '3D Yeniden Yapılandırma']
axes[0, 0].pie(times, labels=labels, autopct='%1.1f%%')
axes[0, 0].set_title('İşleme Zamanı Dağılımı')

# 2. Konum farkı histogramı
pos_diffs = [item['pos_diff'] for item in report['image_pos_diff']]
axes[0, 1].hist(pos_diffs, bins=20, edgecolor='black')
axes[0, 1].set_xlabel('Konum Farkı (metre)')
axes[0, 1].set_ylabel('Görüntü Sayısı')
axes[0, 1].set_title('Görüntü Konum Optimizasyonu Dağılımı')

# 3. Örtüşme haritası
overlap_img = Image.open(f'{report_dir}/thumbnail/overlap_map.png')
axes[1, 0].imshow(overlap_img, cmap='jet')
axes[1, 0].set_title('Görüntü Örtüşme Dağılımı')
axes[1, 0].axis('off')

# 4. Anahtar metrikler metni
metrics_text = f"""
Giriş görüntüleri: {report['input_image_count']}
Kaldırılan görüntüler: {report['removed_image_count']}
Kalıntı RMSE: {report['residual_rmse']:.2f} px
Bağlantı noktaları: {report['tie_point_count']:,}
Sahne alanı: {report['scene_area']/10000:.1f} hektar
Yer çözünürlüğü: {report['scene_gsd']*100:.1f} cm
"""
axes[1, 1].text(0.1, 0.5, metrics_text, fontsize=12,
verticalalignment='center', family='monospace')
axes[1, 1].set_title('Anahtar Kalite Metrikleri')
axes[1, 1].axis('off')

plt.tight_layout()
plt.savefig('quality_report_summary.png', dpi=150)
plt.show()

Otomatik Kalite Kontrolü

Kalite Eşik Değerleri Yapılandırması

QUALITY_THRESHOLDS = {
'excellent': {
'residual_rmse': 0.5,
'removal_rate': 0.02,
'tie_points_per_image': 1000,
'pos_diff_avg': 0.1
},
'good': {
'residual_rmse': 1.0,
'removal_rate': 0.05,
'tie_points_per_image': 500,
'pos_diff_avg': 0.5
},
'acceptable': {
'residual_rmse': 2.0,
'removal_rate': 0.10,
'tie_points_per_image': 200,
'pos_diff_avg': 1.0
}
}

def assess_quality(report):
"""Yeniden yapılandırma kalite seviyesini otomatik olarak değerlendir"""

# Metrikleri hesapla
removal_rate = report['removed_image_count'] / report['input_image_count']
tie_points_per_image = report['tie_point_count'] / report['input_image_count']
pos_diff_avg = np.mean([item['pos_diff'] for item in report['image_pos_diff']])

# Seviyeyi değerlendir
for level, thresholds in QUALITY_THRESHOLDS.items():
if (report['residual_rmse'] <= thresholds['residual_rmse'] and
removal_rate <= thresholds['removal_rate'] and
tie_points_per_image >= thresholds['tie_points_per_image'] and
pos_diff_avg <= thresholds['pos_diff_avg']):
return level

return 'poor'

Rapor Entegrasyon Uygulamaları

Toplu İşleme Kalite İzleme

def batch_quality_monitor(project_dirs):
"""Toplu proje kalite izleme"""

results = []

for project_dir in project_dirs:
report_path = os.path.join(project_dir, 'report/report.json')

if os.path.exists(report_path):
with open(report_path, 'r') as f:
report = json.load(f)

quality_level = assess_quality(report)

results.append({
'project': project_dir,
'images': report['input_image_count'],
'area': report['scene_area'],
'gsd': report['scene_gsd'],
'rmse': report['residual_rmse'],
'quality': quality_level,
'time': report['at_time'] + report['reconstruction_time']
})

# Özet raporu oluştur
df = pd.DataFrame(results)
df.to_csv('batch_quality_report.csv', index=False)

# İstatistikler
print(f"Toplam projeler: {len(results)}")
print(f"Mükemmel: {len(df[df['quality'] == 'excellent'])}")
print(f"İyi: {len(df[df['quality'] == 'good'])}")
print(f"Kabul edilebilir: {len(df[df['quality'] == 'acceptable'])}")
print(f"Kötü: {len(df[df['quality'] == 'poor'])}")

return df

En İyi Uygulamalar

  1. Düzenli rapor kontrolleri: Her yeniden yapılandırmadan sonra kalite metriklerini inceleyin
  2. Temel değerleri belirleyin: Tipik projelerden kalite metriklerini referans olarak kaydedin
  3. Anormallik uyarıları: Anormal metrikleri tespit etmek için otomatik komut dosyaları ayarlayın
  4. Eğilim analizi: Zaman içinde kalite metrik eğilimlerini takip edin
  5. Optimizasyon önerileri: Rapor metriklerine göre yakalama ve işleme parametrelerini ayarlayın

İpucu: Kalite raporu, yeniden yapılandırma iş akışlarını değerlendirmek ve optimize etmek için önemli bir araçtır. Otomatik iş akışlarına entegre edilmesi önerilir.