انتقل إلى المحتوى الرئيسي

تقرير جودة إعادة البناء

نظرة عامة

يقوم MipMapEngine SDK بإنشاء تقرير جودة مفصل بعد إكمال مهام إعادة البناء، يحتوي على معلومات الجهاز وكفاءة إعادة البناء وإعدادات المعلمات وجودة النتائج. يتم تخزين التقرير بتنسيق JSON في ملف report/report.json، إلى جانب الصور المصغرة للتصور للمعاينة السريعة.

هيكل التقرير

1. معلومات الجهاز

يسجل تكوين الأجهزة المستخدمة لإعادة البناء:

الحقلالنوعالوصف
cpu_namestringاسم وحدة المعالجة المركزية
gpu_namestringاسم وحدة معالجة الرسومات

مثال:

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

2. كفاءة إعادة البناء

يسجل وقت المعالجة لكل مرحلة (بالدقائق):

الحقلالنوعالوصف
feature_extraction_timefloatوقت استخراج الميزات
feature_match_timefloatوقت مطابقة الميزات
sfm_timefloatوقت ضبط الحزمة
at_timefloatإجمالي وقت AT
reconstruction_timefloatإجمالي وقت إعادة البناء (باستثناء AT)

مثال:

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

3. معلمات إعادة البناء

يسجل معلمات إدخال المهمة والتكوين:

معلمات الكاميرا

"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]
}
]

ترتيب مصفوفة المعلمات: [f, cx, cy, k1, k2, p1, p2, k3]

  • f: البعد البؤري
  • cx, cy: إحداثيات النقطة الرئيسية
  • k1, k2, k3: معاملات التشويه الشعاعي
  • p1, p2: معاملات التشويه المماسي

معلمات أخرى

الحقلالنوعالوصف
input_camera_countintعدد الكاميرات المدخلة
input_image_countintعدد الصور المدخلة
reconstruction_levelintمستوى إعادة البناء (1=فائق، 2=عالي، 3=متوسط)
production_typestringنوع المنتج
max_ramfloatأقصى استخدام للذاكرة (جيجابايت)

معلومات نظام الإحداثيات

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

أنواع أنظمة الإحداثيات:

  • 0: LocalENU (الشرق-الشمال-الأعلى المحلي)
  • 1: Local (نظام إحداثيات محلي)
  • 2: Geodetic (نظام إحداثيات جيوديسي)
  • 3: Projected (نظام إحداثيات مسقط)
  • 4: ECEF (مركز الأرض-ثابت الأرض)

4. نتائج إعادة البناء

معلمات الكاميرا بعد AT

يسجل معلمات الكاميرا الداخلية المحسنة:

"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]
}
]

اختلافات موضع الصور

يسجل تحسين الموضع لكل صورة:

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

مقاييس الجودة

الحقلالنوعالوصف
removed_image_countintالصور المزالة بعد AT
residual_rmsefloatRMSE للبقايا نقطة الصورة
tie_point_countintعدد نقاط الربط
scene_areafloatمساحة المشهد (متر مربع)
scene_gsdfloatمسافة العينة الأرضية (متر)
flight_heightfloatارتفاع الطيران (متر)
block_countintعدد كتل إعادة البناء

5. معلومات أخرى

الحقلالنوعالوصف
sdk_versionstringإصدار SDK

الصور المصغرة للتصور

يحتوي مجلد thumbnail في دليل التقرير على ملفات التصور التالية:

1. مخطط بقايا الكاميرا

camera_{id}_residual.png - صورة ملونة 24 بت

  • نتيجة معايرة جيدة: البقايا متشابهة في الحجم عبر المواضع مع اتجاهات عشوائية
  • نتيجة معايرة سيئة: بقايا كبيرة مع أنماط اتجاهية واضحة
تلميح

البقايا الكبيرة لا تشير بالضرورة إلى دقة إجمالية ضعيفة، حيث يعكس هذا فقط دقة الكاميرا الداخلية. يجب أن تأخذ الدقة النهائية في الاعتبار دقة إحداثيات نقاط التحكم وجودة النموذج بشكل شامل.

2. خريطة التداخل

overlap_map.png - صورة رمادية 8 بت

  • نطاق قيمة البكسل: 0-255
  • يمكن عرضها كخريطة ملونة لإظهار توزيع التداخل
  • تستخدم لتقييم تصميم مسار الطيران وجودة تغطية الصور

3. صورة مصغرة لمنطقة المسح

rgb_thumbnail.jpg - صورة ملونة 32 بت

  • للمعاينة السريعة للمشروع
  • تظهر نطاق منطقة المسح ونتائج إعادة البناء

أمثلة على تفسير التقرير

مثال تقرير كامل

{
"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"
}

مقاييس تقييم الجودة

معايير الجودة الممتازة

  • residual_rmse < 1.0 بكسل
  • removed_image_count / input_image_count < 5%
  • tie_point_count > 10000
  • متوسط اختلاف الموضع < 0.5 متر

الحالات التي تتطلب الانتباه

  • residual_rmse > 2.0 بكسل: أخطاء نظامية محتملة
  • removed_image_count > 10%: مشاكل في جودة الصورة أو التداخل
  • tie_point_count < 5000: نقاط ميزات غير كافية، تؤثر على الدقة

أدوات تحليل التقارير

مثال تحليل Python

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)

# حساب مقاييس الكفاءة
total_time = report['at_time'] + report['reconstruction_time']
images_per_minute = report['input_image_count'] / total_time

# حساب مقاييس الجودة
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']])

# إنشاء تقرير التحليل
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

# مثال الاستخدام
analysis = analyze_quality_report('report/report.json')
print(f"كفاءة المعالجة: {analysis['efficiency']['images_per_minute']:.1f} صورة/دقيقة")
print(f"متوسط البقايا: {analysis['quality']['residual_rmse']:.2f} بكسل")
print(f"دقة الأرض: {analysis['scale']['gsd_cm']:.1f} سم")

تصور تقرير الجودة

import matplotlib.pyplot as plt
from PIL import Image

def visualize_quality_report(report_dir):
# قراءة بيانات التقرير
with open(f'{report_dir}/report.json', 'r') as f:
report = json.load(f)

# إنشاء المخططات
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 1. مخطط دائري لتوزيع الوقت
times = [
report['feature_extraction_time'],
report['feature_match_time'],
report['sfm_time'],
report['reconstruction_time']
]
labels = ['استخراج الميزات', 'مطابقة الميزات', 'ضبط الحزمة', 'إعادة البناء ثلاثي الأبعاد']
axes[0, 0].pie(times, labels=labels, autopct='%1.1f%%')
axes[0, 0].set_title('توزيع وقت المعالجة')

# 2. رسم بياني لاختلاف الموضع
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('اختلاف الموضع (متر)')
axes[0, 1].set_ylabel('عدد الصور')
axes[0, 1].set_title('توزيع تحسين موضع الصور')

# 3. خريطة التداخل
overlap_img = Image.open(f'{report_dir}/thumbnail/overlap_map.png')
axes[1, 0].imshow(overlap_img, cmap='jet')
axes[1, 0].set_title('توزيع تداخل الصور')
axes[1, 0].axis('off')

# 4. نص المقاييس الرئيسية
metrics_text = f"""
الصور المدخلة: {report['input_image_count']}
الصور المزالة: {report['removed_image_count']}
RMSE البقايا: {report['residual_rmse']:.2f} بكسل
نقاط الربط: {report['tie_point_count']:,}
مساحة المشهد: {report['scene_area']/10000:.1f} هكتار
دقة الأرض: {report['scene_gsd']*100:.1f} سم
"""
axes[1, 1].text(0.1, 0.5, metrics_text, fontsize=12,
verticalalignment='center', family='monospace')
axes[1, 1].set_title('مقاييس الجودة الرئيسية')
axes[1, 1].axis('off')

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

فحص الجودة الآلي

تكوين عتبات الجودة

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):
"""تقييم مستوى جودة إعادة البناء تلقائيًا"""

# حساب المقاييس
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']])

# تقييم المستوى
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'

تطبيقات تكامل التقارير

مراقبة جودة المعالجة المجمعة

def batch_quality_monitor(project_dirs):
"""مراقبة جودة المشاريع المجمعة"""

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']
})

# إنشاء تقرير ملخص
df = pd.DataFrame(results)
df.to_csv('batch_quality_report.csv', index=False)

# الإحصائيات
print(f"إجمالي المشاريع: {len(results)}")
print(f"ممتاز: {len(df[df['quality'] == 'excellent'])}")
print(f"جيد: {len(df[df['quality'] == 'good'])}")
print(f"مقبول: {len(df[df['quality'] == 'acceptable'])}")
print(f"ضعيف: {len(df[df['quality'] == 'poor'])}")

return df

أفضل الممارسات

  1. فحوصات التقارير المنتظمة: مراجعة مقاييس الجودة بعد كل إعادة بناء
  2. إنشاء خطوط الأساس: تسجيل مقاييس الجودة من المشاريع النموذجية كمراجع
  3. تنبيهات الشذوذ: إعداد البرامج النصية الآلية لاكتشاف المقاييس غير الطبيعية
  4. تحليل الاتجاه: تتبع اتجاهات مقاييس الجودة بمرور الوقت
  5. اقتراحات التحسين: ضبط معلمات الالتقاط والمعالجة بناءً على مقاييس التقرير

نصيحة: تقرير الجودة أداة مهمة لتقييم وتحسين سير عمل إعادة البناء. يُنصح بدمجه في سير العمل الآلي.