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:
| Alan | Tür | Açıklama |
|---|---|---|
cpu_name | string | CPU adı |
gpu_name | string | GPU 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):
| Alan | Tür | Açıklama |
|---|---|---|
feature_extraction_time | float | Özellik çıkarma süresi |
feature_match_time | float | Özellik eşleştirme süresi |
sfm_time | float | Demet ayarlama süresi |
at_time | float | Toplam AT süresi |
reconstruction_time | float | Toplam 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
| Alan | Tür | Açıklama |
|---|---|---|
input_camera_count | int | Giriş kamera sayısı |
input_image_count | int | Giriş görüntü sayısı |
reconstruction_level | int | Yeniden yapılandırma seviyesi (1=Ultra yüksek, 2=Yüksek, 3=Orta) |
production_type | string | Ürün türü |
max_ram | float | Maksimum 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
| Alan | Tür | Açıklama |
|---|---|---|
removed_image_count | int | AT sonrası kaldırılan görüntüler |
residual_rmse | float | Görüntü noktası kalıntı RMSE |
tie_point_count | int | Bağlantı noktası sayısı |
scene_area | float | Sahne alanı (metrekare) |
scene_gsd | float | Yer örnekleme mesafesi (metre) |
flight_height | float | Uçuş yüksekliği (metre) |
block_count | int | Yeniden yapılandırma blok sayısı |
5. Diğer Bilgiler
| Alan | Tür | Açıklama |
|---|---|---|
sdk_version | string | SDK 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
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 pikselremoved_image_count/input_image_count< %5tie_point_count> 10000- Ortalama konum farkı < 0.5 metre
Dikkat Gerektiren Durumlar
residual_rmse> 2.0 piksel: Olası sistematik hatalarremoved_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
- Düzenli rapor kontrolleri: Her yeniden yapılandırmadan sonra kalite metriklerini inceleyin
- Temel değerleri belirleyin: Tipik projelerden kalite metriklerini referans olarak kaydedin
- Anormallik uyarıları: Anormal metrikleri tespit etmek için otomatik komut dosyaları ayarlayın
- Eğilim analizi: Zaman içinde kalite metrik eğilimlerini takip edin
- 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.