کرنل یعنی یک آرایه دو بعدی یا یک بعدی که دارای مجموعه ای از ضرایب هستش به طورییکه کرنل دارای یک نقطه ی مرکزی به نام anchor point هستش.
convolution به طور خلاصه یعنی عملی که بین هر نقطه از تصویر با کرنل صورت می گیره اطلاق میشه.
حال شما قصد دارید عملیات کانولوشن را به صورت دستی انجام بدید تصویر را از چپ به راست و بالا به پایین پیمایش کنید
فرض کنید از کرنلی با ابعاد 5*5 استفاده می کنید و نقطه جاری شما مختصات (25,25 ) در تصویر هستش حالا باید یک ناحیه از تصویر را انتخاب کنید که هم اندازه
با کرنل هستش و عناصر را نظیر در نظیر در کرنل ضرب کرده و همه مقادیر را با هم جمع کرده و تقسیم بر مجموع مقادیر کرنل کنید این ناحیه از مختصات (23,23) تا مختصات (27,27) هستش
حال مقدار بدست آمده را در تصویر نهایی در موقعیت (25,25) قرار می دیم این کار رو برای تمامی پیکسل ها انجام می دیم.
حالا می تونیم هم ابعاد کرنل را تغییر بدیم یعنی وقتی محاسباتی که انجام می دیدم از همسایه های دورتری از پیکسل جاری را استفاده کنه و هم می تونیم مقادیر کرنل را تغییر بدیم.
به فرض ضرایب گوسی دو بعدی را در کرنل قرار بدیم و بعد عمل کانولوشن یعنی فیلتر گوسین را بر روی تصویر اعمال کردیم اگر همه مقادیر کرنل یک باشه یعنی فیلتر box را بر روی تصویر اعمال کردیم.
خوشبختانه توی OpenCV نیازی نیست شما عملیات بالا را به صورت دستی انجام بدید شما می تونید از تابع filter2D استفاده کنید.
پارامتر های مهم در کانولوشن :
-
فیلترها: تعداد فیلترهای مستقلی که باید روی ورودی اعمال شوند. این همچنین تعداد کانالهای خروجی در خروجی خواهد بود.
-
kernel_size: اندازه هر فیلتر. این میتواند یک عدد واحد باشد، مانند 4 برای یک فیلتر 4x4، یا یک جفت مانند (4، 2) برای یک فیلتر مستطیل 4x2.
-
strides: فیلتر در سراسر تصویر ورودی با گامهایی حرکت میکند. اندازه گام پیشفرض 1 پیکسل در هر دو جهت است. استفاده از یک گام بزرگتر باعث میشود که پیکسلهای ورودی را رد کرده و تعداد کمتری از مقادیر خروجی تولید کند.
-
padding:استفاده از 'valid' برای بدون padding یا 'same' برای padding صفر در لبهها. اگر فیلترها روی ورودیهایی با padding 'valid' اعمال شوند، فقط در صورتی که همه پیکسلهای درون پنجره معتبر باشند، تبدیل convolutional انجام میشود، بنابراین پیکسلهای مرزی نادیده گرفته میشوند. بنابراین، خروجی کمی در جهت x و y کوچکتر خواهد بود. مقدار 'same' امکان padding صفر ورودی را برای اطمینان از اینکه خروجیها دارای همان عرض و ارتفاع هستند، فعال میکند.
-
activation: مانند هر لایه شبکه عصبی، یک لایه convolutional میتواند با یک activation (غیرخطی) دنبال شود.