هیستوگرام یک نمایش گرافیکی از توزیع شدت پیکسل ها در یک تصویر است. نمایش هیستوگرام یک نمودار میله‌ای از داده‌ها است که طیفی از نتایج را در ستون‌هایی در امتداد محور x قرار می‌دهد. محور y تعداد تکرارها را در تصویر نشان می دهد که در هر دسته قرار می گیرند. هیستوگرام ها معمولاً در پردازش تصویر برای درک توزیع شدت پیکسل در یک تصویر و شناسایی الگوها و روندها در داده ها استفاده می شوند.

هیستوگرام ها برای شناسایی ویژگی های زیر مفید هستند:

– کنتراست contrast: محدوده شدت پیکسل در تصویر.

– روشنایی brightness: روشنایی کلی تصویر.

– اشباع saturation: میزان رنگ در تصویر.

– وضوح sharpness: وضوح لبه ها در تصویر.

هیستوگرام ها همچنین برای شناسایی مشکلات کیفیت تصویر مانند نوردهی بیش از حد، نوردهی کم و مشکلات تعادل رنگ مفید هستند. آنها می توانند به شناسایی الگوها و روندهایی در داده ها کمک کنند که ممکن است با یک بازرسی بصری ساده از تصویر آشکار نشوند.

هیستوگرام ها را می توان در پردازش تصویر برای اهداف زیر استفاده کرد:

– تقسیم‌بندی تصویر image segmentation: از هیستوگرام‌ها می‌توان برای تعیین آستانه تقسیم‌بندی تصویر برای جداسازی پس‌زمینه از یک شی استفاده کرد.

– عکاسی: هیستوگرام ها را می توان برای بهبود تصاویر با تغییر برخی از ویژگی های آنها استفاده کرد.

– تصاویر رنگی: یکسان سازی هیستوگرام را می توان در تصاویر رنگی انجام داد.

– Thresholding: یک تصویر در مقیاس خاکستری را می توان با انتخاب یک آستانه و تبدیل تمام مقادیر بالای آستانه به حداکثر شدت و همه مقادیر زیر آستانه به حداقل شدت به یک تصویر سیاه و سفید تبدیل کرد. هیستوگرام وسیله ای مناسب برای شناسایی آستانه مناسب است.

ما می توانیم از Library Pillow و Matplotlib برای ایجاد هیستوگرام یک تصویر بدون استفاده از OpenCV استفاده کنیم. در اینجا یک نمونه کد کد است که نحوه ایجاد هیستوگرام یک تصویر با استفاده از Pillow و Matplotlib را نشان می دهد:

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import os
currentDir=os.path.dirname(os.path.abspath(__file__))
img = Image.open(currentDir + '/kara.jpeg')
img_array = np.array(img)
plt.hist(img_array.ravel(), bins=256, range=(0, 255))
plt.show()

تصویری که می خواهیم هیستوگرام آن را استخراج کنیم در شکل زیر می بینید:

pillow

نمودار هیستوگرام تصویر را که در نتیجه اجرای برنامه ایجاد شده است در شکل زیر می توانید ببینید:

pillow histogram

در این مثال ابتدا تصویر kara.jpeg را با استفاده از روش Image.open از Pillow بارگذاری می کنیم. سپس با استفاده از روش np.array تصویر را به آرایه NumPy تبدیل می کنیم. در نهایت با استفاده از متد plt.hist از Matplotlib یک هیستوگرام از تصویر ایجاد می کنیم و با روش plt.show نمایش می دهیم.

تابع plt.hist از Matplotlib برای محاسبه و ایجاد یک هیستوگرام از شدت پیکسل در یک تصویر استفاده شده است. در اینجا می بینیم که هر پارامتر در تابع چه کاری انجام می دهد:

– img_array.ravel: این پارامتر داده های ورودی هیستوگرام را مشخص می کند. در این مورد، یک آرایه NumPy مسطح از شدت پیکسل در تصویر است.

img_array.ravel متدی از کلاس  ndarray است که برای پهن کردن یک آرایه چند بعدی به یک آرایه 1 بعدی استفاده می شود. در این مورد، img_array یک آرایه NumPy است که یک تصویر را نشان می‌دهد و از ravel برای پهن کردن آن به یک آرایه 1 بعدی با شدت پیکسل استفاده می‌شود.

– bins=256: این پارامتر تعداد bin هایی را که برای هیستوگرام استفاده می شود را مشخص می کند. در این مورد، ما از 256 bin استفاده می کنیم، به این معنی که دامنه شدت پیکسل در تصویر به 256 بازه مساوی تقسیم می شود.

– range=(0, 255): این پارامتر محدوده شدت پیکسل را برای درج در هیستوگرام مشخص می کند. در این مورد، ما تمام شدت پیکسل ها را بین 0 تا 255 در نظر می گیریم.

تابع plt.hist سه مقدار را برمی‌گرداند: مقادیر هیستوگرام، لبه‌های bin و وصله‌های مورد استفاده برای ایجاد هیستوگرام. با این حال، در این مثال، ما مقدار بازگشتی را به هیچ متغیری اختصاص نمی‌دهیم، بنابراین از آن صرفنظر می‌شود.

آموزش های پردازش تصویر با Pillow