توزیع اندازه نسبی
دستورالعمل برای تحلیل و مصورسازی توزیع اندازههای حاشیهنویسی نسبت به تصویر
کد پایتون برای اجرای مراحل فوق
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# بارگذاری حاشیهنویسیها و تصاویر
annotations = pd.read_csv('annotations.csv') # فرض بر این است که حاوی ستونهای 'image_id', 'x', 'y', 'width', 'height' است
images = pd.read_csv('images.csv') # فرض بر این است که حاوی ستونهای 'image_id', 'width', 'height' است
# محاسبه اندازه نسبی حاشیهنویسیها
annotations = annotations.merge(images, on='image_id')
annotations['relative_area'] = (annotations['width_x'] * annotations['height_x']) / (annotations['width_y'] * annotations['height_y'])
# تعریف آستانهها برای دستهبندی اندازهها
small_threshold = 0.01
large_threshold = 0.1
annotations['size_category'] = pd.cut(annotations['relative_area'],
bins=[0, small_threshold, large_threshold, np.inf],
labels=['Small', 'Medium', 'Large'])
# محاسبه توزیع حاشیهنویسیها در دستههای اندازه
size_distribution = annotations['size_category'].value_counts(normalize=True) * 100
# محاسبه اندازه متوسط تصاویر در هر دسته اندازه
average_image_size_by_category = annotations.groupby('size_category').apply(lambda x: (x['width_y'] * x['height_y']).mean())
# اندازه متوسط تصویر مجموعه دادهها
average_dataset_image_size = (images['width'] * images['height']).mean()
# مصورسازی توزیع حاشیهنویسیها
fig, ax1 = plt.subplots(figsize=(10, 6))
color = 'tab:blue'
ax1.set_xlabel('Size Category')
ax1.set_ylabel('Percentage of Annotations', color=color)
ax1.bar(size_distribution.index, size_distribution.values, color=color, alpha=0.6)
ax1.tick_params(axis='y', labelcolor=color)
# اضافه کردن اندازه متوسط تصاویر به نمودار
ax2 = ax1.twinx()
color = 'tab:red'
ax2.set_ylabel('Average Image Size', color=color)
ax2.bar(average_image_size_by_category.index, average_image_size_by_category.values, color=color, alpha=0.4)
ax2.axhline(y=average_dataset_image_size, color='cyan', linestyle='--', label='Average Dataset Image Size')
ax2.tick_params(axis='y', labelcolor=color)
fig.tight_layout()
plt.title('Distribution of Annotations by Size Category and Average Image Sizes')
plt.legend(loc='upper right')
plt.show()توضیحات کد
Last updated