image processing, java, پردازش تصویر, پردازش تصویر در جاوا, جاوا

Kernel در جاوا (پرازش تصویر)

Kernel در جاوا (پرازش تصویر)

در این قسمت تیم کدگیت را با آموزش Kernel در جاوا (پرازش تصویر) همراهی کنید. در ادامه آموزش‌های پردازش تصویر در جاوا امروز در خصوص Kernel و کاربردهای آن صحبت خواهیم کرد. همچنین در پایان با استفاده از کتابخانه OpenCV به پیاده‌سازی یک Kernel خواهیم پرداخت. پیش‌نیازهای این آموزش شامل موارد زیر است:

Kernel چیست؟

Kernel (هسته) در پردازش تصویر (یا بینایی مایشن) ماتریسی هستند که بر روی آن‌ها عملیات convolution انجام می‌گردد. convolution با عملیات ضرب، دو آرایه را با هم ادغام می‌کند. در پردازش تصویر convolution با عبور از هر پیکسل، عملیاتی بر روی آن پیکسل و همسایگان آن انجام می‌دهد (کمی گیج کننده شد!).

در تصویر زیر یک ماتریس Kernel آورده‌ایم که سایز آن 3*3 می‌باشد.

Kernel در جاوا

عملیات convolution

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

Kernel در جاوا (پرازش تصویر)

مراحل زیر را برای انجام دادن عملیات convolution انجام می‌دهیم:

  • بر روی تمامی پیکسل‌های تصویر با استفاده از ماتریس Kernel یک بار چرخش انجام می‌دهیم.
  • درایه‌های ماتریس Kernel و پیکسل‌‎های تصویر را به صورت نظیر به نظیر با هم ضرب می‌کنیم.
  • حاصلضرب‌های مرحله قبل را با هم جمع می‌کنیم.
  • مقدار بدست آمده، حاصل خانه وسط پیکسل تصویر است.
  • مراحل بالا را برای تمامی پیکسل‌ها انجام می‌دهیم.
Kernel در جاوا (پرازش تصویر)

Kernel در جاوا

برای پیاده سازی kernel در جاوا از کلاس Mat برای ایجاد Kernel و از کلاس Imgproc متد filter2D برای انجام عملیات فیلتر بر روی تصویر استفاده خواهیم کرد. این متد یک Kernel را به عنوان ورودی می‌گیرد و بر روی آن عملیات convolution انجام می‌دهد. برای پیاده سازی ابتدا یک Kernel ایجاد می‌کنیم:

Mat kernel = new Mat();
Mat ones = Mat.ones(3, 3, CvType.CV_32F);
Core.multiply(ones, new Scalar(1 / (double) (9)), kernel);

در کد بالا تمامی درایه‌های ماتریس Kernel برابر با 1/9 می‌باشد. حال تصویر Baboon.png را می‌خوانیم:

Mat input = Imgcodecs.imread("baboon.png");

در ادامه با استفاده از متد  filter2D فیلتر دلخواه خود را پیاده سازی می‌کنیم:

Mat filterOutput = new Mat();
Imgproc.filter2D(input, filterOutput, -1, kernel);

ورودی‌های متد filter2D به ترتیب تصویر ورودی، تصویر خروجی، عمق تصویر (برابر با عمق تصویر ورودی قرار داده شده است) و ماتریس Kernel می‌باشد. خروجی تصویر ما به صورت زیر است:

Kernel در جاوا (پرازش تصویر)

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

Kernel در جاوا (پرازش تصویر)

نوشته های مشابه

دیدگاهتان را بنویسید

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