هیستوگرام تصویر، تعداد پیکسلهای هر مقدار یا بازهٔ روشنایی را نشان میدهد. برای تصویر خاکستری ۸بیتی، مقدارهای صفر تا ۲۵۵ را میتوان شمرد؛ این شمارش جای پیکسلها را نگه نمیدارد. دو تصویر با چینش متفاوت ممکن است هیستوگرام دقیقاً یکسان داشته باشند.
مثال ۱۶ پیکسلی؛ چهار بازه چه میگویند؟
تصویر آموزشی ما چهار سطر دارد: «۰،۰،۶۴،۶۴»، «۰،۶۴،۱۲۸،۱۲۸»، «۱۲۸،۱۹۲،۲۵۵،۲۵۵» و «۱۹۲،۱۹۲،۲۵۵،۰». این عددها دادهٔ عکس مشتری نیستند؛ برای کنترل دستی انتخاب شدهاند. هر مقدار را در بازهٔ مشخص خودش میشماریم و در پایان جمع شمارشها باید ۱۶ باشد.
| بازهٔ شامل دو سر | تعداد پیکسل | سهم تصویر |
|---|---|---|
| ۰ تا ۶۳ | ۴ | ۲۵٪ |
| ۶۴ تا ۱۲۷ | ۳ | ۱۸٫۷۵٪ |
| ۱۲۸ تا ۱۹۱ | ۳ | ۱۸٫۷۵٪ |
| ۱۹۲ تا ۲۵۵ | ۶ | ۳۷٫۵٪ |
میانگین روشنایی همین مثال ۱۱۹٫۸۱۲۵ است. این میانگین نمیگوید نوشتهٔ داخل تصویر خواناست یا نه. اگر جای همهٔ پیکسلها را برعکس کنیم، میانگین و هیستوگرام تغییر نمیکنند، اما یک الگوی مکانی میتواند کاملاً عوض شود. این آزمون کوچک، مرز اطلاعاتی نمودار را روشن میکند.
کد شمارش؛ بدون نصب کتابخانه
from collections import Counter
image = [[0,0,64,64],[0,64,128,128],[128,192,255,255],[192,192,255,0]]
values = [x for row in image for x in row]
def histogram(xs):
if not xs or any(type(x) is not int or not 0 <= x <= 255 for x in xs):
raise ValueError('nonempty 8-bit integer pixels required')
counts = Counter(x//64 for x in xs)
return [counts[i] for i in range(4)]
counts = histogram(values)
print('counts', counts)
print('fractions', [n/len(values) for n in counts])
print('mean', sum(values)/len(values))
assert counts == [4,3,3,6]
assert histogram(list(reversed(values))) == counts
assert histogram([255]) == [0,0,0,1]
assert sum(counts) == 16
کد چهار بازهٔ هماندازه میسازد و مقدار ۲۵۵ را در بازهٔ آخر نگه میدارد. در کتابخانهای مانند OpenCV برای پوشش کامل دادهٔ ۸بیتی معمولاً انتهای بازهٔ محاسبه ۲۵۶ است؛ آن قرارداد را با برچسب نمایشی «تا ۲۵۵» اشتباه نگیرید. در این کد، تقسیم صحیح بر ۶۴ قرارداد شمارش را مشخص میکند.
قبل از OCR چه استفادهای دارد؟
برای اسکن سند، میتوانید سهم ناحیههای بسیار تیره یا بسیار روشن را کنار تصویر اصلی ببینید. اگر یک گوشه سایه دارد، هیستوگرام کل صفحه ممکن است مشکل همان گوشه را پنهان کند؛ ناحیهٔ نوشته را جدا هم بررسی کنید. روشنکردن کل تصویر، جزئیات سفیدی را که قبلاً از دست رفتهاند برنمیگرداند.
هیستوگرام ابزار تشخیص حرف یا اندازهگیری دقت OCR نیست. برای متن سند، چند واژه و عدد مهم را با اصل تطبیق دهید؛ راهنمای اسناد تصویری در جستوجوی دانشی مسیر استفاده از متن استخراجشده و شاهد آن را توضیح میدهد. تغییر روشنایی را فقط وقتی نگه دارید که آزمون خواندنِ همان نمونه بهتر شده باشد.
رنگ، عمق و مقایسهٔ درست
این تمرین دربارهٔ تصویر خاکستری و ۸بیتی است. کانالهای رنگی، تصویر ۱۶بیتی و دادهٔ اعشاری دامنهٔ دیگری دارند. اگر تصویرها اندازهٔ متفاوت دارند، تعداد خام پیکسل را مقایسه نکنید؛ سهم هر بازه را کنار تعداد و ابعاد گزارش کنید. روش تبدیل رنگ، تعداد بازهها و ناحیهٔ بررسی نیز باید یکسان باشند.
نسخهٔ اصلی را نگه دارید و پردازش را روی کپی انجام دهید. ابعاد و فشردهسازی خروجی وب مسئلهٔ دیگری است: کمحجمکردن فایل نباید با تغییر توزیع روشنایی یا افزایش کیفیت خواندن یکی شمرده شود. اگر نیاز اصلیتان پاسخگویی به مشتری با اطلاعات معتبر است، از انتخاب خدمت اپرا شروع کنید؛ این مثال سرویس OCR اپرا را معرفی نمیکند.
فایل تمرین و منابع
دریافت کد مستقل این راهنما. دادهها ساختگی و آموزشیاند؛ کد اتصال شبکه، فایل شخصی یا فراخوانی سرویس ندارد.
تاریخ مطالعهٔ منبع: ۳ نوامبر ۲۰۲۶. محاسبهها و مثال این مطلب برای آموزش طراحی شدهاند.