تبدیل تصاویر خاکستری به رنگی با شبکه های عصبی در OpenCV

رنگ آمیزی تصاویر خاکستری با استفاده از شبکه عصبی کانولوشن در OpenCV

نویسنده: سونیتا نایاک-۲۹ ژولای ۲۰۱۷
مترجم: حسین غلامعلی نژاد
فن آوری بعضی اوقات می تواند به پیشرفت و تعالی هنر کمک کند و گاهی می تواند موجبات پسرفت و افول را برای هنر فراهم آورد.
رنگ آمیزی فیلم های سیاه و سفید، ایده ای بسیار قدیمی(از سال ۱۹۰۲) بوده است. برای چندین دهه، سازندگان فیلم های سیاه و سفید، بدلیل احتمال خراب شدن فیلم هایشان، در مقابل رنگ آمیزی فیلم ها جبهه گیری می کردند. ولی امروزه این فرآیند به عنوان یک عامل برای تعالی هنر، مورد قبول گرفته است.
فن آوری رنگی سازی تصاویر سیاه و سفید، از روش های سخت و رنج آفرین دستی به روش های هوشمند ارتقا یافته است. در ایالات متحده فیلم های افسانه ای با استفاده از روش های هوشمند به فیلم های کلاسیک رنگی تبدیل شده اند. در هند فیلم «مغول اعظم» که در سال ۱۹۶۰ فیلم برداری شده بود، در سال ۲۰۰۴ به فرم رنگی تبدیل شد. مردم از نسل های مختلف برای دیدن تئاترها سالن های تئاتر را شلوغ می کردند ولی دیدن مجدد آن که فقط از طریق فیلم های سیاه و سفید تصویر برداری شده، امکان پذیر بود، احساسی ناخوش آیند به مردم منتقل می کرد.
مقالات رنگ آمیزی زیادی با استفاده از روش های بینایی ماشین سنتی چاپ شده است. یکی از مقالات مورد علاقه ی من این است:
Colorization using Optimization by Anat Levin, Dani Lischinski, and Yair Weiss
این مقاله از تعدادی قلم رنگی با هدف هدایت یک مسئله ی بهینه سازی برای حل کردن مقوله ی رنگ آمیزی استفاده کرده است.
در چند سال گذشته، با تحول ایجاد شده توسط روش های یادگیری عمیق در شناسایی الگو، هوشمند سازی در رنگی سازی، جهش رو به جلوی بزرگی را رقم زده است. در ادامه، مطالبی پیرامون یک مدل از یادگیری عمیق، فرا خواهیم گرفت. ما همچنین کد OpenCV را برای استفاده از مدل آموزش یافته در کاربردهای c++ و پایتون را نیز به اشتراک خواهیم گذاشت.
رنگ آمیزی تصویر
ریچارد ژانگ و همکاران در مقاله ای با عنوان ” Colorful Image Colorization ” که در ECCV 2016 چاپ شد، یک شبکه عصبی کانولوشن برای رنگ آمیزی تصاویر سیاه و سفید معرفی نمودند. آن ها شبکه را با ۱٫۳ میلیون تصویر از مجموعه آموزشی ImageNet آموزش دادند. آنها همچنین مدل آموزش دیده مبتنی بر caffe را در دسترس عموم قرار داده اند. در این پست، ابتدا مسئله ی رنگ آمیزی را تشریح خواهیم کرد. سپس به بررسی ویژگی های ساختاری مقاله خواهیم پرداخت و در نهایت کد و تعدادی از نتایج عملی را به اشتراک خواهیم گذاشت.
تعریف مسئله ی رنگ آمیزی
ابتدا به تعریف مسئله ی رنگ آمیزی از لحاظ فضای رنگی CIE Lab می پردازیم. همانند فضای رنگ RGB، این فضا نیز از سه کانال تشکیل شده است. ولی برخلاف فضای RGB، اطلاعات رنگ در کانال های a (قسمت سبز-قرمز) و کانالb (قسمت آبی- زرد) وجود دارد. کانالL، فقط شدت روشنایی را در خود دارد.
تصویر خاکستری تصویری که می خواهیم رنگی کنیم، می تواند به عنوان داده های کانالL در فضای رنگLab در نظر گرفته شود. و حال باید به دنبال یافتن اجزایa و b باشیم. تصویرLab می تواند با استفادهد از توابع استاندارد تبدیل فضا، به فضای RGB تبدیل شود. به عنوان مثال با استفاده از دستورcvtcolor با آپشن COLOR_BGR2Lab می توان تصویر را از فضای RGB به فضای Lab منتقل کرد.
برای ساده کردن محاسبات، فضای ab از فضای رنگLab، به ۳۱۳ قسمت کوچک(bin)، مطابق شکل زیر قطعه بندی شده است.colors ab spaceبه جای یافتن مقادیر a و b برای هر پیکسل، کافیست فقط یک شماره بین صفر و ۳۱۲  انتخاب کنیم. پس می توانیم مسئله ی مورد بررسی را به این صورت بیان کنیم؛ مقادیر کانالL را داریم که اعدادی بین صفر و ۲۵۵ هستند و هدف یافتن مقادیری برای جفت کانالab هست که مقادیریبین صفر و ۳۱۲ خواهد بود. مسئله ی پیش بینی رنگ، به یک مسئله ی کلاسه بندی چند بعدی تبدیل شده است. به این صورت که برای هر پیکسل خاکستری، ۳۱۳ کلاس مختلف وجود دارد.ساختار CNNبرای رنگ آمیزیساختار پیشنهاد شده توسط ژانگ و همکاران یک شبکه شبیه vgg با چندین بلوک کانولوشن است. هرکدام از بلوک ها از دو یا سه لایه ی کانولوشن که توسط یک لایه ی ReLU دنبال می شوند و در یک لایه ی نرمال سازی تجمعی خاتمه می یابند، تشکیل شده است. در این شبکه برخلافvgg، لایه های pooling و تماما متصل وجود ندارد.colorizing network architectureتصویر ورودی به صورت۲۲۴*۲۲۴ تغییر ابعاد یافته است. تصویر ورودی را با X نشان می دهیم.

ابعاد   به صورت H*W*Q است که H=56 و W=56 عرض و طول خروجی آخرین لایه ی کانولوشن است. برای هرکدام از پیکسل های H*W،   ، شامل یک بردار Q با ۳۱۳ مقدار است که هر مقدار، بیان کننده ی احتمال تعلق پیکسل به آن کلاس است. هدف، یافتن یک مقدار منحصر به فرد از مقادیر کانال ab برای هر توزیع احتمال است.

بازیابی تصویر رنگی 

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

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

تابع خطای چندقله ای با تنظیم مجدد رنگ

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

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

برای هرپیکسل  از تصویر خروجیY، ما می توانیم به آسانی نزدیک ترین bin برای   را به عنوان یک بردار صفر و یکی در نظر بگیریم. به طوری که مقدار ۱ را برای نزدیک ترینbin و مقدار صفر را برای سایر ۳۱۲ بین در نظر می گیریم. برای گرفتن نتایج بهتر از روش ۵-nearest neighbors استفاده می کنیم و توزیع نرمال را برای محاسبه ی توزیع  با توجه به فاصله از ground truth در نظر می گیریم.

تابع خطای فوق، متاسفانه رنگ های غلطی تولید می کند که دلیل آن، زیاد بودن توزیع رنگ ها در ImageNet حول خط خاکستری است.

 

نتایج رنگ آمیزی

نویسندگان  مقاله، هردو روش آموزش یافته یCoffe (با و بدون تنظیم مجدد رنگ) را به اشتراک گذاشته اند. ما از هر دو مدل استفاده نموده و نتایج را در شکل های زیر به اشتراک گذاشته ایم. ستون وسط مدل بدون تنظیم مجدد رنگ و ستون بعدی مدل با تنظیم مجدد را نمایش می  دهد.

حیوانات

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

color rebalanced colorization example cat

color rebalanced colorization example dog in beach

فضاهای بیرونی

color rebalanced colorization example hill night

نویسندگان، مدل پیش آموزش یافته و ویژگی های شبکه را در GitHub در اینجا مهیّا کرده اندکه برای دریافت کدهای پایتون و سی پلاس پلاس برای رنگ آمیزی تصاویر خاکستری با استفاده از این شبکه ی از پیش آموزش یافته می توانید به آن مراجعه نمایید. کدها مبتنی بر OpenCV version 3.4.1 است.

3 در مورد “رنگ آمیزی تصاویر خاکستری با استفاده از شبکه عصبی کانولوشن در OpenCV”

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا