رفتن به محتوا

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

ابزار و گجت
۰ نظر
۷۱ نفر
کد ۴۷۰۰

سلام! قراره با هم وارد دنیای شگفت‌انگیز بینایی ماشین و پردازش تصویر بشیم. تو این آموزش روی مفهوم جذاب تصویربرداری با بازه دینامیکی بالا یا همون HDR کار می‌کنیم تا ببینیم چطور می‌شه عینک‌های هوشمندی ساخت که دید فرابشری بهمون بدن. این تکنولوژی دقیقا همون چیزیه که به سنسورها اجازه می‌ده توی تاریکی مطلق یا نور خیره‌کننده، جزئیات رو به وضوح ببینن.

تیم آیسی‌مدار این پروژه رو طوری طراحی کرده که با مفاهیم پایه‌ای پردازش تصویر آشنا بشی و بتونی اونا رو تو پروژه‌های پوشیدنی خودت پیاده کنی. هدف ما اینه که با ترکیب چند تصویر با نوردهی‌های مختلف، به یه تصویر کامل برسیم که هیچ جزئیاتی توش از دست نرفته باشه.

بریم سراغ ساخت و ترکیب این تصاویر تا یه دید جدید به دنیای اطرافمون پیدا کنیم و بتونیم از دل داده‌های خام، تصاویری بسازیم که فراتر از قدرت دید طبیعی انسان هستن.

  1. در صورت نیاز تقویت کن: مثلا در تاریکی کامل ببین و با markerهای مجازی annotate کن یا فیلدها و اطلاعات حسی نامرئی رو قابل‌مشاهده کن;
  2. در صورت نیاز کم کن: مثلا نواحی روشن صحنه مثل قوس الکتریکی TIG، درخشش لامپ، خورشید، بازتاب اجسام specular و غیره رو ملایم کن; و
  3. تغییر: به مردم کمک کن ببینن با تغییر میدان دید، نه فقط اضافه کردن. شامل جایگزینی حسی مثل دیدن مادون قرمز برای دیدن گرم شدن قطعه کار، و دیدن امواج رادیویی و موارد مشابه.
  1. تقویت دید در شرایط خاص: مثلا دیدن در تاریکی مطلق و اضافه کردن نشانگرهای مجازی یا مرئی کردن اطلاعاتی که با چشم غیرمسلح دیده نمی‌شن.
  2. کاهش نورهای مزاحم: کم کردن شدت نور در مناطق خیلی روشن تصویر، مثل نور قوس الکتریکی جوشکاری، درخشش لامپ‌ها، نور خورشید و بازتاب اجسام براق.
  3. تغییر میدان دید: کمک به بینایی از طریق اصلاح میدان دید (نه فقط اضافه کردن به اون). مثل جایگزینی حسی برای دیدن امواج مادون قرمز جهت تشخیص داغ شدن قطعات یا حتی دیدن امواج رادیویی.
  • لینک: — عکس‌های HDR با GIMP بدون نرم‌افزار خاص (فقط با ویرایشگر تصویر);
  • لینک:
  • لینک:
  • لینک:
  • ساخت تصاویر HDR با نرم‌افزارهای ساده ویرایش عکس مثل GIMP بدون نیاز به افزونه‌های خاص.
مرحله ۱

قدم اول: ثبت تصاویر با نوردهی‌های مختلف

اول از همه باید درک کنیم که چطور سنسورها با سطوح مختلف نور برخورد می‌کنن. ایده اصلی خیلی سادست؛ باید چند تا عکس از یه منظره ثابت بگیریم، اما با میزان نوردهی (Exposure) متفاوت. این منطق رو می‌تونی برای هر نوع سیستم ثبت داده‌ای پیاده کنی.

جالبه بدونی که این مفهوم از سال‌ها پیش تو سیستم‌های صوتی هم کاربرد داشته. مثلا وقتی می‌خواستن صداهای ضعیف و قوی رو همزمان و بدون افت کیفیت ثبت کنن، از دو تا کانال ضبط استفاده می‌کردن؛ یکی با حساسیت کم برای صداهای بلند و یکی با حساسیت بالا برای صداهای آروم.

با این روش، کانالی که حساسیت کمتری داشت هرگز تو صداهای بلند به اصطلاح اشباع (Saturate) نمی‌شد و کیفیتش رو حفظ می‌کرد. در عوض کانال حساس‌تر، صداهای پس‌زمینه و ضعیف رو به بهترین شکل ضبط می‌کرد.

وقتی این کانال‌ها با هم ترکیب بشن، به یه خروجی با محدوده دینامیکی بسیار بالا می‌رسیم که به تنهایی با هیچ سنسور معمولی‌ای قابل ثبت نیست.

حالا دقیقا همین تکنیک رو می‌خوایم تو پردازش تصویر پیاده کنیم. وقتی یه عکس خیلی تاریک می‌گیریم، جزئیات بخش‌های روشن مثل آسمون یا لامپ‌ها حفظ می‌شه. وقتی هم عکس روشنی می‌گیریم، سایه‌ها خودشون رو نشون می‌دن.

تو دوربین‌های مدرن، نوردهی بیش از حد به سنسور آسیبی نمی‌زنه، فقط باعث می‌شه تصویر تو اون ناحیه سفید یا اشباع بشه. پس با خیال راحت می‌تونیم عکس‌های Overexposed و Underexposed رو بگیریم.

این اصل مهم در مورد خیلی از سنسورها، میکروفون‌ها و آنتن‌ها صدق می‌کنه. باید دنبال شرایطی باشی که سنسور در اثر ورودی زیاد فقط اشباع بشه اما نسوزه.

اگه به تصاویری که در حال ترکیبشون هستیم نگاه کنی، می‌بینی که عکس اول روی فضای بیرون فوکوس نوری کرده تا آسمون و نورها دقیق ثبت بشن، در حالی که آدم‌های تو عکس تاریک شدن. اما تو عکس بعدی، نوردهی جوری تنظیم شده که جزئیات معماری داخل ساختمون و چهره‌ها کاملا واضح باشن. تو عکس اول سایه‌ها به اصطلاح کات‌آف شدن و هیچی دیده نمی‌شه، و تو عکس دوم نواحی روشن به شدت اشباع و سفید شدن.

حالا وقتشه دوربینت رو برداری و خودت یه دیتاست از تصاویری با نوردهی‌های مختلف بسازی. سعی کن تصاویرت تنوع نوری بالایی داشته باشن تا بتونیم رابطه ریاضی بینشون رو کشف کنیم.

برای درک بهتر، بیا فرض کنیم v1 اون عکسیه که نوردهی کمتری داشته و v2 عکسیه که با ضریب k نور بیشتری دریافت کرده. سنسور دوربین هم یه تابع واکنش (f) داره که این نورها رو به پیکسل تبدیل می‌کنه. پس به زبون ریاضی ما یه مقداری داریم که تو مختصات x و y تصویر در حال تغییره و ما می‌خوایم این تفاوت‌ها رو به دست بیاریم.

بهترین و پایه‌ای‌ترین ابزار ریاضی برای مقایسه دو تا عکس با نوردهی مختلف، نموداری به اسم مقایسه‌نگار (Comparagram) هست که تو قدم بعدی حسابی باهاش کار داریم.

مرحله ۲

حالا بریم سراغ نمودار مقایسه‌نگار

وقتی مفهوم مقایسه‌نگار رو درک کنی، یعنی قدم اصلی رو برای فهمیدن تکنولوژی HDR برداشتی. این ابزار به ما نشون می‌ده که سنسور چطور به سطوح مختلف نور واکنش نشون می‌ده و رابطه بین دو تا عکس مختلف رو چطور باید تعریف کرد.

مقایسه‌نگار در واقع یه هیستوگرام مشترک بین دو تا تصویره که منظره یکسانی دارن اما نوردهی‌شون فرق می‌کنه. با این روش می‌فهمیم که هر پیکسل تو عکس تاریک‌تر، چه مقداری تو عکس روشن‌تر داره. برای رسم این نمودار می‌تونی خودت دست به کد بشی یا از اسکریپت‌های آماده استفاده کنی.

مثلا تو محیط‌هایی مثل Octave یا متلب، اگه دو تا عکس سیاه و سفید با 256 سطح خاکستری داشته باشی، با یه خط کد می‌تونی ماتریس مقایسه رو تولید کنی. کد Cg = full(sparse(v1+1,v2+1,1,256,256)) دقیقا همین کار رو برات انجام می‌ده. برای پردازش سریع‌تر می‌تونی کدهای سی‌پلاس‌پلاس رو مستقیما داخل محیط برنامه‌نویسیت کامپایل کنی تا سرعت محاسباتت خیلی بیشتر بشه.

البته اگه از سیستم‌عامل‌های لینوکسی استفاده می‌کنی ممکنه لازم باشه پکیج‌های توسعه مثل liboctave-dev رو اول نصب کنی تا سیستم بتونه کدهات رو بخونه.

چون عکس‌های ما رنگی و بر اساس فرمت RGB هستن، مقایسه‌نگار ما هم سه تا کانال جداگانه خواهد داشت. کانال قرمز عکس اول با قرمز عکس دوم مقایسه می‌شه و همین روال برای رنگ‌های سبز و آبی هم تکرار می‌شه.

اگه عکس‌ها رو سیاه و سفید کنی کارت راحت‌تر می‌شه، چون فقط با یه کانال نوری سروکار داری و رفتار سنسور هم برای تمام رنگ‌ها تقریبا یکسانه.

از نظر آکادمیک، مقایسه‌نگار یه ماتریس مربعیه که محور X اون مقادیر پیکسلی عکس اول و محور Y مقادیر همون پیکسل‌ها رو تو عکس دوم نشون می‌ده. ابعاد این ماتریس بستگی به سطوح نوری عکس داره. اگه عکس 256 سطح رنگی داشته باشه، ماتریس ما 256 در 256 خواهد بود. در واقع این نمودار بهمون می‌گه که مثلا سطح روشنایی 50 تو عکس تاریک، تو عکس روشن به چه عددی (مثلا 150) تبدیل شده.

برای اینکه درک بهتری پیدا کنی، پیشنهاد می‌کنم یه ماتریس کوچیک 3 در 4 پیکسل رو در نظر بگیری و سعی کنی هیستوگرام مشترکش رو روی کاغذ یا تو نرم‌افزار رسم کنی.

با جمع کردن ردیف‌ها و ستون‌های این ماتریس، می‌تونی هیستوگرام مستقل هر عکس رو هم به دست بیاری که تعداد کل پیکسل‌ها رو بهت نشون می‌ده. یه تمرین خیلی باحال برای درک این موضوع وجود داره. یکی از عکس‌هات رو تو نرم‌افزاری مثل GIMP باز کن.

برو تو بخش تنظیمات رنگ و گزینه Curves رو انتخاب کن. حالا یه انحنای دلخواه برای تنظیم نور بساز و عکس رو با یه اسم جدید ذخیره کن.

حالا اگه مقایسه‌نگار عکس اصلی و این عکس جدید رو رسم کنی، می‌بینی که خروجی دقیقا همون منحنی‌ایه که خودت تو نرم‌افزار کشیده بودی! این نشون می‌ده الگوریتم چطور رفتار نوری رو تشخیص می‌ده.

فقط حواست باشه تو برنامه‌نویسی گاهی محورها برعکس یا جابه‌جا خونده می‌شن، پس شاید لازم باشه نمودارت رو 90 درجه بچرخونی تا دقیقا شبیه تنظیمات Curves بشه. چند بار این کار رو با شکل‌های مختلف امتحان کن تا قشنگ دستت بیاد سیستم چطور کار می‌کنه.

حالا تو می‌دونی که مقایسه‌نگار یه ابزار قدرتمنده که همزمان دو تا چیز رو استخراج می‌کنه: اول واکنش سنسور دوربین به نور، و دوم اختلاف دقیق نوردهی بین دو تا تصویر مختلف.

  1. تابع واکنش دوربین نسبت به نور محیط.
  2. تفاوت‌های دقیق نوردهی تو تصاویر ثبت‌شده متوالی.
مرحله ۳

هم‌ترازی و انطباق تصاویر روی هم

تو این مرحله باید عکس‌هایی که گرفتیم رو دقیقا روی هم منطبق کنیم. اینجا دو تا حالت داری:

  • استفاده از دوربین ثابت روی سه‌پایه (مثل دوربین‌های مداربسته).
  • استفاده از دوربین‌های پوشیدنی و هم‌تراز کردن تصاویر به صورت نرم‌افزاری.

وقتی عکس‌ها کاملا روی هم قرار گرفتن، می‌تونیم از مقایسه‌نگار استفاده کنیم تا رنگ و نور اونا رو با هم یکپارچه کنیم. مقایسه‌نگار در واقع شبیه یه جدول جستجو عمل می‌کنه. وقتی خط مرکزی این نمودار رو پیدا کنی، می‌تونی به راحتی مقادیر یه عکس رو به عکس دیگه تبدیل کنی.

تو پروژه‌های معمولی HDR دوربین ثابته، اما تو عینک‌های هوشمند، دوربین مدام روی چشم تو در حال حرکته و زاویه دید تغییر می‌کنه. اینجا علاوه بر تنظیم نور، درگیر انطباق مکانی هم می‌شیم. یعنی باید پیکسل‌ها رو جوری جابه‌جا کنیم که لبه‌ها دقیقا روی هم بیفتن، دقیقا شبیه کاری که برای ساخت عکس‌های پانوراما انجام می‌شه.

برای شروع کارت رو سخت نکن؛ الگوریتم رو فقط روی دو تا عکس پیاده کن تا اصولش رو کامل یاد بگیری. نکته جالب اینجاست که اختلاف نوردهی‌ها می‌تونه کاملا طبیعی و به خاطر سیستم تنظیم خودکار نور دوربین (AGC) اتفاق بیفته. وقتی سرت رو به سمت یه لامپ یا فضای روشن بچرخونی، دوربین خودبه‌خود تصویر رو تاریک می‌کنه تا جزئیات نور مشخص بشه.

و برعکس، وقتی به سمت فضای تاریک نگاه می‌کنی، دوربین تصویر رو روشن می‌کنه تا سایه‌ها رو بهتر ببینی. دقیقا تو همین نقاط هم‌پوشانی و تغییر نوره که جادوی اصلی رخ می‌ده و می‌تونی تصاویر رو برای ساخت یه فریم بی‌نقص ترکیب کنی.

مرحله ۴

ادغام هوشمندانه برای رسیدن به تصویر نهایی

خب، تصاویر ما هم‌تراز شدن و حالا وقتشه که اونا رو به هم بدوزیم تا یه تصویر یکپارچه و باکیفیت بسازیم. الان تو برای هر پیکسل، چند تا مقدار نوری مختلف داری.

این مرحله رو مثل خوندن ولتاژ با یه مولتی‌متر تو رنج‌های مختلف در نظر بگیر؛ در نهایت باید همه این خروجی‌ها رو ترکیب کنی تا به یه عدد دقیق برسی.

ترکیب این تصاویر شبیه یه سیستم رای‌گیریه؛ هر عکس برای تعیین رنگ نهایی پیکسل حق رای داره، اما ارزش رای‌ها برابر نیست! تو مناطق تاریک، عکس‌های روشن‌تر رای قوی‌تری دارن چون جزئیات رو بهتر ثبت کردن. برای تن‌های میانی هم عکس‌هایی که نوردهی متوسط داشتن بیشترین تاثیر رو می‌ذارن، اما همچنان از دیتاهای تاریک و روشن هم کمک می‌گیرن.

به این روش اصطلاحا میانگین‌گیری وزن‌دار می‌گن. اما برای اینکه سرعت پردازش خیلی بالاتر بره، از جداول جستجو (LUT) استفاده می‌شه که ابعادی شبیه همون مقایسه‌نگار دارن.

با استفاده از LUTها، سیستم دیگه نیازی به محاسبه‌های سنگین نداره و فقط جواب رو از جدول می‌خونه. این کار اونقدر سریعه که می‌تونی رو ویدیوهای زنده پیاده‌سازیش کنی. الگوریتمی که روی این جداول پیاده می‌شه به شکل چشمگیری سریع‌تر از روش‌های قدیمی HDR عمل می‌کنه. حتی می‌تونی این منطق رو مستقیما روی سخت‌افزارهایی مثل FPGA پیاده کنی تا سرعت پردازش تصاویرت به حداکثر برسه.

اگه هدفت استفاده تو سیستم‌های بینایی ماشین یا تشخیص چهره باشه، کارت همینجا تمومه و می‌تونی دیتای خام رو به الگوریتم بدی. اما اگه می‌خوای خروجی رو روی مانیتور ببینی، باید کمی فشرده‌سازی رنگ اعمال کنی تا کنتراست تصویر برای چشم انسان طبیعی‌تر بشه.

نرم‌افزارهای زیادی برای فیلتر کردن تصویر وجود داره، اما پیشنهاد می‌کنم خودت دست به کد بشی و فیلتر دلخواهت رو بنویسی؛ اینطوری هم کلی چیز جدید یاد می‌گیری و هم از پروسه ساخت لذت بیشتری می‌بری.

مرحله ۵

ایده پردازی و کاربردهای فرابشری

وقتی خودت دست به کار می‌شی و این الگوریتم‌ها رو از صفر پیاده می‌کنی، درک خیلی عمیق‌تری پیدا می‌کنی و می‌تونی ایده‌های دیوانه‌کننده‌ای رو عملی کنی. مثلا می‌تونی تکنیک‌های HDR رو تو حوزه‌های علمی جدید به کار بگیری.

یکی از جذاب‌ترین کاربردها، بررسی بیولوژیکی و شبیه‌سازی سیستم‌های بصریه. به این کار اصطلاحا دیدن بینایی می‌گن؛ یعنی با سنسورها فرآیند دیدن رو تحلیل و مصورسازی کنیم.

همونطور که تو تست‌های بینایی، قدرت دید چشم تو بخش‌های مختلف میدان دید متفاوته، سنسورهای HDR هم می‌تونن همین رفتار رو مدل‌سازی کنن. با استفاده از یه پالت رنگی کاذب می‌شه این بازه دینامیکی عظیم رو به تصویر کشید و قدرت چشم رو تو شرایط مختلف بررسی کرد.

با ترکیب این تکنولوژی و عینک‌های هوشمند، ما بالاخره می‌تونیم پدیده‌های فیزیکی و نوری رو طوری ببینیم و تحلیل کنیم که تا قبل از این فقط تو فیلم‌های علمی‌تخیلی ممکن بود.

مرحله ۶

گام آخر: خروجی بگیر و به اشتراک بذار

به پایان این مسیر جذاب رسیدیم. پردازش تصویر و ساخت سیستم‌های نوری هوشمند یکی از اون مهارت‌هاییه که مرزهای تکنولوژی رو جابه‌جا می‌کنه. حتی اگه تا رسم مقایسه‌نگار پیش رفتی، همین الان دست به کار شو و یکی از تمرین‌های زیر رو انجام بده:

  1. چند تا عکس با نوردهی‌های مختلف از یه زاویه ثابت ثبت کن.
  2. یه عکس رو با خودش مقایسه کن تا هیستوگرام روی قطر اصلی نمودار رو بهتر درک کنی.
  3. دو تا عکس با تنظیمات کاملا یکسان بگیر و نویزهای سنسور رو تو مقایسه‌نگار بررسی کن.
  4. مقایسه‌نگار دو تا عکس با نوردهی کاملا متفاوت رو رسم کن و تفاوت‌ها رو ببین.
  5. با استفاده از داده‌های به دست اومده، تصاویر رو با هم ترکیب کن.
  6. یه جدول CCRF (که معادل همون مقایسه‌نگاره) برای پردازش‌های سریع‌تر بساز.
  7. سرعت و کیفیت ترکیب تصاویر رو با این روش بررسی کن تا متوجه بهینه‌سازی الگوریتمت بشی.

تو میتونی اولین سازنده باشی!

اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر

این آموزش با استانداردهای اختصاصی آیسی‌مدار بازنویسی و بهینه‌سازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.

آموزش‌های مشابه

گفتگو‌های کاربران

هنوز نظری ثبت نشده؛ تو شروع کن!