در این قسمت تیم کدگیت را با آموزش Kernel در پایتون (پرازش تصویر) همراهی کنید. در ادامه آموزشهای پردازش تصویر در پایتون امروز در خصوص Kernel و کاربردهای آن صحبت خواهیم کرد. همچنین در پایان با استفاده از کتابخانه OpenCV به پیادهسازی Kernel خواهیم پرداخت. پیشنیازهای این آموزش شامل موارد زیر است:
- فیلم آموزش تصاویر و انواع نمایش آنها
- فیلم آموزش خواندن تصاویر در پایتون
- فیلم آموزش نوشتن تصاویر در پایتون
- فیلم آموزش رسم اشکال هندسی در پایتون
- آموزش مدل رنگی در پایتون
- آموزش ترکیب تصاویر در پایتون
- آموزش آستانهگذاری تصاویر در پایتون
Kernel چیست؟
Kernel (هسته) در پردازش تصویر (یا بینایی مایشن) ماتریسی هستند که بر روی آنها عملیات convolution انجام میگردد. convolution با عملیات ضرب، دو آرایه را با هم ادغام میکند در پردازش تصویر convolution با عبور از هر پیکسل، عملیاتی بر روی آن پیکسل و همسایگان آن انجام میدهد (کمی گیج کننده شد!).
در تصویر زیر یک ماتریس Kernel آوردهایم که سایز آن 3*3 میباشد.

عملیات convolution
ما یک Kernel داریم که میخواهیم عملیات convolution انجام دهیم. عدد وسط ماتریس Kernel را بر روی پیکسلهای تصویر قرار داده و بر روی پیکسلها حرک میکنیم. حرکت بر روی پیکسلها به صورت زیر میباشد:

مراحل زیر را برای انجام دادن عملیات convolution انجام میدهیم:
- بر روی تمامی پیکسلهای تصویر با استفاده از ماتریس Kernel یک بار چرخش انجام میدهیم.
- درایههای ماتریس Kernel و پیکسلهای تصویر را به صورت نظیر به نظیر با هم ضرب میکنیم.
- حاصلضربهای مرحله قبل را با هم جمع میکنیم.
- مقدار بدست آمده، حاصل خانه وسط پیکسل تصویر است.
- مراحل بالا را برای تمامی پیکسلها انجام میدهیم.

Kernel در پایتون
برای پیاده سازی kernel در پایتون، از کتابخانه numpy برای ایجاد Kernel و از کتابخانه OpenCV متد filter2D برای انجام عملیات فیلتر بر روی تصویر استفاده خواهیم کرد. این متد یک Kernel را به عنوان ورودی میگیرد و بر روی آن عملیات convolution انجام میدهد. برای پیاده سازی ابتدا یک Kernel ایجاد میکنیم:
kernel = np.ones((3, 3), np.float32) / 9
در کد بالا تمامی درایههای ماتریس Kernel برابر با 1/9 میباشد. حال تصویر Baboon.png را میخوانیم:
image = cv2.imread('baboon.png')
در ادامه با استفاده از متد filter2D فیلتر دلخواه خود را پیاده سازی میکنیم:
img = cv2.filter2D(image, -1, kernel)
ورودیهای متد filter2D به ترتیب تصویر ورودی، عمق تصویر (برابر با عمق تصویر ورودی قرار داده شده است) و ماتریس Kernel میباشد. خروجی تصویر ما به صورت زیر است:

تصویر ورودی نیز به صورت زیر است:
