فیلتر Max در جاوا (Maximum Filter in java)

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

  1. خواندن و نوشتن تصاویر در جاوا
  2. بهبود تصاویر در جاوا
  3. حلقه For در جاوا
  4. استثناها در جاوا
  5. فایل در جاوا
  6. آرایه در جاوا

همسایه یک پیکسل در تصاویر

همانطور که در آموزش بهبود تصاویر در جاوا گفته شد تصاویر از پیکسل‌ها تشکیل شده و نحوه نمایش آنها به صورت آرایه دو بعدی است(البته تصاویر RGB سه آرایه دو بعدی داریم!). به تصویر زیر دقت کنید:

فیلتر Max در جاوا

 در تصویر بالا همسایگان پیکسل X و Y را نمایش دادیم. این نمایش را نمایش همسایگان 8 تایی یک پیکسل تعریف می‌کنند. همسایه 4 تایی یک پیکسل به صورت زیر نمایش داده می‌شود:

فیلتر Max در جاوا

الگوریتم فیلتر Max در جاوا

الگوریتم فیلتر Max بسیار ساده بوده و نیاز به فرمول ریاضی خاصی ندارد. با استفاده از همسایه‌های 8 تایی پیکسل X و Y، ما ماکزیمم(مقدار بیشینه) همسایگی و پیکسل X  و Y را به عنوان پیکسل جدید انتخاب می‌کنیم. باید توجه کنید ما نقاط مرزی را در نظر نمی‌گیریم اما روش‌های مختلفی وجود دارد که می‌توان از آن استفاده کرد.(ما برای سادگی پیاده سازی از پیکسل‌های مرزی صرف نظر کردیم.)

فیلتر Max در جاوا

پیاده‌سازی فیلتر Max در جاوا

برای پیاده سازی فیلتر Max در جاوا مراحل زیر را انجام می‌دهیم:

  1. یک تصویر را به عنوان ورودی دریافت می‌کنیم.
  2. تصویر ورودی را می‌خوانیم. با توجه به تصویر نیاز به سه ماکزیمم داریم. (هر پیکسل شامل سه رنگ R و G و B است)
  3. برای پیکسل X و Y، پیکسل‌های R و G و B همسایه 8 تایی و خود X و Y را درون آرایه میریزیم.
  4. آرایه‌های خود را مرتب می‌کنیم.
  5. مقدار پیکسل جدید، مقدار خانه آخر آرایه‌های R و G و B است. (آرایه به صورت صعودی مرتب شده است)
  6. موارد 3 تا 5 را برای تمام پیکسل‌های تصویر انجام می‌دهیم.

کد این الگوریتم به صورت زیر است:

بیشتر بخوانید:  pdf آموزش دستور شرطی if در جاوا (if statement)

متدهای استفاده شده در کد فوق:

  • متد getRed: از آنجا که ما با تصاویر RGB کار می‌کنیم در هنگام دریافت یک پیکسل در جاوا رنگ‌های R و G و B را به صورت یکجا در یک مقدار به ما می‌دهد. این متد مقدار رنگ قرمز را از رنگ سبز و آبی جدا کرده و به ما برمی‌گرداند.
  • متد getGreen: مانند متد getred بوده اما رنگ سبز یک پیکسل را برای ما بر‌می‌گرداند.
  • متد getBlue: مانند متدهای بالا بوده اما رنگ آبی یک پیکسل را به ما می‌دهد.
  • متد MaxRed: این متد اندیس‌های یک پیکسل را در ورودی دریافت می‌کند و  ماکزیمم رنگ قرمز همسایگان 8 تایی به همراه پیکسل ورودی را بدست آورده در خروجی به ما می‌دهد. نکته قابل ذکر این است که چون پیکسل تصویر ما شامل سه عدد R و G و B بوده باید برای هر سه آنها به طور جداگانه مقدار ماکزیمم را محاسبه کرد.
  • متد MaxGreen: دقیقا مانند متد MaxRed کار می‌کند فقط در خروجی ماکزیمم رنگ‌های سبز را به ما می‌دهد.
  • متد MaxBlue: مانند متدهای MaxRed و MaxGreen بوده اما در خروجی ماکزیمم رنگ آبی پیکسل ورودی و همسایگانش را بر‌می‌گرداند.

خروجی برنامه

خروجی کد بالا به صورت زیر است:

فیلتر Max در جاوا

در بالا ما یک تصویر داریم که واژه Max را به صورت Bold در ورودی دریافت کرده است و در خروجی به دلیل استفاده از فیلتر ماکزیمم رنگ سیاه نازکتر شده، فیلتر ماکزیمم بین رنگ سیاه (مقدار صفر) و رنگ سفید (مقدار 255) مقدار بیشتر یعنی رنگ سفید را انتخاب می‌کند به همین دلیل تصویر خروجی به اصطلاح از حالت Bold خارج شده است.

پسورد: www.codegate.ir

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

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