فیلتر تصویر و مفهوم کرنل در پردازش تصویر

در پردازش تصویر، یک کرنل یا هسته (Kernel) یا ماتریس کانولوشن (Convolution Matrix) یا پوشش (Mask) یک ماتریس کوچک است که روی تصویر اعمال می شود. در واقع یک کرنل تصویر (Image Kernel) که از این پس آنرا کرنل می نامیم، یک ماتریس کوچک است که برای اعمال افکت ها (Effects) به تصویر، استفاده می شود.ایده عملیات Mask (یا Mask Operation) محاسبه مجدد (Recalculate) مقدار هر یک از پیکسل های یک تصویر مطابق با ماتریس Mask است.

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

۱پردازش صداکاربرد کانولوشن در یک بعد

۲پردازش تصویرکاربرد کانولوشن در دو بعد

۳پردازض ویدیوکاربرد کانولوشن در سه بعد

در این مطلب (و این دوره) می خواهیم کانولوشن را در کاربرد فضای دو بعدی و به طور خاص در زمینه پردازش تصویر بررسی کنیم. می دانید که از دید رایانه، یک تصویر، به صورت آرایه دو بعدی (ماتریسی) دو بعدی است که مقدار درایه های آن میان عددهای صفر تا ۲۵۵ هستند. اندازه تصویر برابر با تعداد سطرها (Width) در تعداد ستون ها (Height) است. تعداد کانال های (Channels) تصویر نیز برابر با  است.

طبق آنچه که پیش از این و در مطلب آشنایی با مفاهیم ابتدایی در OpenCV – تصویر خاکستری و رنگی توضیح دادیم، اگر تصویر خاکستری (Graayscale) باشد، پس هر درایه آن به صورت یک عدد میان بازه صفر تا ۲۵۵ است که صفر به معنی سیاه ترین (تاریک ترین) و عدد ۲۵۵ به معنی سفید ترین (روشن ترین) رنگ است. به عبارت دیگر تصویرهای خاکستری تک کانالی هستند. اما اگر تصویر به صورت رنگی RGB باشد و چون هر پیکسل تصویر متشکل از ترکیب سه رنگ اصلی آبی، سبزو قرمز است، پس هر درایه ماتریس متشکل از سه عدد است که هر یک از عددها میان بازه صفر تا ۲۵۵ است و از این رو تصویرهای RGB سه کانالی هستند.

به طور مثال شکل زیر که برشی از ماتریس یم تصویر تک کانالی (خاکستری) است، پیسکل ها و مقدارهای آنها را برای پنج سطر و ستون نخست (گوشه سمت چپبالای تصویر) را نشان می دهد. همانطور که می دانید برای نمایش این ماتریس در OpenCV و زبان سی پلاس پلاس، ساختار Mat (مخفف Matrix) و در زبان پایتون از نوع آرایه N بعدی (ndarray) در ماژول NumPy استفاده می شود.

عملگر کانولوشن و کرنل

در مفاهیم ریاضی و به خصوص در تحلیل تابع، کانولوشن یک عملگر (Operator) ریاضی است که بر روی دو تابع f و g عمل کرده، و تابع سومی را تولید می کند که می توان به عنوان نسخه تصحیح شده یکی از دو تابع اصلی نگریسته شود.  هر عملگر کانولوشن دارای یک کرنل (Kernel) خاص خودش است که در واقع این کرنل که ماتریس کانولوشن گفته می شود، یک ماتریس مربعی است که اندازه آن عددی فرد است. به عبارت دیگر کرنل می تواند به صورت 1x1 یا 3x3  یا 5x5  یا 7x7 و غیره باشد. به عبارت دیگر کرنل،  ماتریس مربعی به اندازه عدد فرد است که، کوچکتر از ماتریس خود تصویر است.

به طور نمونه ماتریس (کرنل) زیر مربوط به فیلتر Blur (تاریک کردن تصویر) است. ما در مطلب بعدی در مورد ویژگی های کرنل های دو فیلتر ساده به ام های Low Pass Filter (یا LPF) و High Pass Filter (یا HPF) صحبت کرده ایم. اگر می خواهید فهرست برخی از کرنل های متداول را ببینید، می توانید صفحه ویکی پدیا معرفی کرنل در پردازش تصویر را بخوانید.

مطلب بعدی : پردازش تصویر – مقدمه ای بر فیلترها در مورد فلیترهای LPF و HPF

بنابراین هر کدام از این کرنل ها برای منظور خاصی مورد استفاده قرار می گیرند. به طور مثال کرنلی برای فیلتر تاریک کردن تصویر (Blur Filtering)، کرنلی برای روشن سازی تصویر (Sharpening) و کرنلی نیز برای تشخیص لبه (Edge Detection) وجود دارددر مورد تشخیص لبه ها در مطلب های پیش رو صحبت شده است. همچنین می توانید از اینجا کرنل های متفاوت را پیدا کنید.

عملگر کانولوشن چگونه کار می کند

فرض کنید همانند شکل زیر ماتریسی 3x3، یعنی شامل ۹ درایه داریم که از آن به عنوان کرنل استفاده می کنیم. بنابراین مطابق شکل زیر کرنل از گوشه سمت راست بالای ماتریس تصویر، به ۹ درایه نخست درون ماتریس اعمال می شودکانولوشن، عملیات وارون کردن (Flip) ماتریس کرنل به صورت افقی و عمودی و سپس ضرب نظیر به نظیر درایه های دو ماتریس و در نهایت جمع همه ی آنهاست. البته اگر ماتریس هسته متقارن باشد نیازی به وارون کردن افقی و عمودی ماتریس نیست زیرا در این حالت هسته ی وارون شده با هسته ی اصلی برابر است.

همانطور در شکل بالا می بینید درایه سطر و ستون دوم (2, 2) ماتریس خروجی، برابر است با مجموع حاصل ضرب دارایه های نظیر به نظیر کرنل با آن بخش از ماتریس تصویر که در نهایت این مقدار بدست آمده ( در اینجا ۸۹)، در درایه نظیر آن در ماتریس خروجی قرار می گیرد. توجه کنید درایه سطر و ستون دوم در ماتریس تصویر برابر با مرکز کرنل 3x3 در شکل زیر است. شکل زیر چگونگی حرکت کرنل و محاسبه درایه ماتریس خروجی را نشان می دهد.

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

توجه کنید و به یاد داشته باشید که هر کدام از کاربردها دارای ماتریس خاص خودش است به این معنی که در فیلتر Blur کرنل با فلیتر شفاف سازی (Sharpening) متفاوت است ولی چیزی که میان خصوصیت تمامی کرنل ها مشترک است اینکه، اندازه آنها عددی فرد و به صورت مربعی هستند و اندازه کرنل از ماتریس تصویر کوچکتر است و همچنین حاصل اعمال کرنل به ماتریس تصویر، یک ماتریس تصویر خروجی از تغییرات است.

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

۱مات کردن تصویر

۲تیز کردن (شفاف کردن) تصویر

۳برجسته سازی تصویر

۴تشخیص لبه یا آشکار سازی لبه

۵بر طرف سازی نویز از تصویر