الگوریتم فیلتر میانه در سی شارپ (Median Filter)

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

  1. خواندن تصاویر در سی شارپ
  2. ایجاد تصویر در سی شارپ
  3. حلقه For در سی شارپ
  4. آرایه در سی شارپ

میانه چیست؟

میانه عدد وسط مجموعه‌ای از اعداد مرتب است و به دو صورت زیر محاسبه می‌شود:

  1. تعداد اعداد مجموعه زوج باشد: میانگین دو عدد وسط را میانه می‌گویند.
  2. تعداد اعداد مجموعه فرد باشد: عدد وسط مجموعه را میانه تعریف می‌کنند.

به عنوان مثال مجموعه مرتب زیر را ببینید:

9, 12, 14, 17, 19, 22, 25

تعداد اعداد 7 است(فرد است) پس میانه عدد وسط یعنی عدد 17 می‌شود. به عنوان مثال دوم میانه مجموعه زیر را پیدا کنید:

8, 12, 14, 17, 21, 23, 25, 30

تعداد اعداد 8(زوج است) است پس میانه برابراست با میانگین دو عدد وسط یعنی 2/(17+21).

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

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

الگوریتم فیلتر میانه در سی شارپ

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

الگوریتم فیلتر میانه در سی شارپ

الگوریتم فیلتر میانه در سی شارپ

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

الگوریتم فیلتر میانه در سی شارپ

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

بیشتر بخوانید:  عدد اول در سی شارپ (Prime Numbers)

برای سادگی کار ما مرز یک تصویر را در نظر نمی‌گیریم اما راه‌حل‌های مختلفی وجود دارد که این مشکل را برطرف کرده است.

الگوریتم فیلتر میانه در سی شارپ

پیاده‌سازی الگوریتم فیلتر میانه در سی شارپ

پیاده‌سازی الگوریتم فیلتر میانه در سی شارپ بسیار ساده است. ابتدا یک تصویر رنگی را می‌خوانیم. سپس برای تمامی پیکسل‌های آن موارد زیر را اعمال می‌کنیم:

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

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

بیشتر بخوانید:  مرتب سازی ادغامی در سی شارپ (Merge Sort)

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

الگوریتم فیلتر میانه در سی شارپ

همانطور که در تصویر فوق می‌بینید فیلتر میانه برای نویز گیری تصاویر استفاده می‌شود.

پسورد: www.codegate.ir

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

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