تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

14 بازدید
۱۴۰۵-۰۱-۳۱
6 دقیقه
  • نویسنده: Sepehr Kouzegaran
  • درباره نویسنده: ---

 در قسمت قبل با نحوه‌ی بدست آوردن برشی از تصویر، حذف کانال های مورد نظر، تغییر مقدار پیکسل های قسمت انتخاب شده از تصویر در پایتون آشنا شدیم. در این قسمت از آموزش می‌خواهیم با Array Indexing نحوه‌ی تولید ماسک دایروی و حلقوی را یاد بگیریم. با استفاده از این ماسک ها می‌توان در تصویر (ماتریس دو بعدی) ناحیه ی دایره ای مورد نظر را انتخاب کرد. همچنین برای پیاده سازی فیلتر در حوزه ی فرکانس (برای فیلتر کردن تصویر) می‌توان از این روش استفاده کرد.

کد های پایتون نوشته در این آموزش، در یک فایل ژوپیتر نوت بوک نوشته شده اند. لینک دانلود فایل ژوپیتر نوت بوک مربوط به این آموزش در انتهای صفحه قرار داده شده است.

برای تعریف آرایه ها کتابخانه numpy، برای ترسیم نمودار کتابخانه matplotlib و برای خواندن تصویر کتابخانه cv2 را import می‌کنیم.

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

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

یک تصویر  سیاه با ارتفاع 200 و عرض 300 پیکسل ایجاد کنیم. می‌خواهیم در وسط این تصویر یک دایره به شعاع 30 پیکسل با رنگ قرمز رسم کنیم. برای اینکار کافیست پیکسل هایی که فاصله‌شان از مرکز تصویر کمتر مساوی 30 پیکسل (شعاع دایره) هست را پیدا کنیم. ابتدا فاصله‌ی هر پیکسل از مرکز تصویر را پیدا کرده و سپس با آستانه گذاری، پیکسل هایی که در شرط صدق می‌کنند را پیدا می‌کنیم.

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

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

در این حالت مبدا (0, 0) در گوشه‌ی سمت چپ بالا قرار دارد.

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

می‌خواهیم در مرکز تصویر دایره را رسم کنیم. نصف عرض تصویر را از X و نصف ارتفاع تصویر را از Y کم می‌کنیم. این کار باعث می‌شود مختصات (0, 0) در مرکز تصویر قرار بگیرد.

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

حال می‌توان از روی X و Y بدست آمده فاصله‌ی هر پیکسل از مرکز تصویر را محاسبه کرد. برای محاسبه‌ی فاصله‌ی هر پیکسل از مرکز تصویر، ابتدا X و Y را به توان دو رسانده و رادیکال حاصل جمع آن ها را محاسبه می‌کنیم. در ماتریس بدست آمده (dist)  فاصله هر پیکسل از مرکز قرار می‌گیرد.

می‌خواهیم یک دایره به شعاع 30 پیکسل رسم کنیم. ماتریس فاصله‌ها را با 30 (شعاع دایره) مقایسه می‌کنیم و پیکسل هایی که فاصله‌شان از مرکز تصویر کمتر مساوی 30  هست را پیدا می‌کنیم. نتیجه‌ی مقایسه یک ماتریس دو بعدی شامل مقادیر True و False بدست می‌آید. در اندیس هایی از ماتریس که شرط برقرار هست مقدار True و در بقیه‌ی اندیس ها مقدار False قرار می‌گیرد. این ماسک دو بعدی را با imshow نمایش می‌دهیم. چون ماتریس ماسک، دو بعدی است به آرگومان cmap تابع imshow مقدار gray را ارسال می‌کنیم تا ماتریس دریافتی را به صورت یک تصویر سیاه و سفید در نظر گرفته و رسم کند.

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر ماسک خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

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

برای رسم دایره در تصویر (img) از ماسک mask1 استفاده می‌کنیم تا قسمت مورد نظر از تصویر را انتخاب کنیم. می‌خواهیم رنگ دایره قرمز باشد، بنابراین کانال قرمز (اندیس صفر در بعد سوم) را انتخاب کرده و در این اندیس ها مقدار 255 را قرار می‌دهیم. با نمایش تصویر خروجی مشاهده می‌کنیم که در مرکز تصویر یک دایره با رنگ قرمز و شعاع دلخواه رسم شده است.

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

ماسک حلقوی

حال می‌خواهیم قسمت حلقوی از تصویر را انتخاب کنیم. می‌خواهیم شعاع داخلی حلقه 30 و شعاع خارجی آن 50 پیکسل باشد. ابتدا یک ماسک ایجاد کرده و پیکسل های مورد نظر را انتخاب می‌کنیم. مرکز این حلقه را هم در وسط تصویر در نظر می‌گیریم، با این فرض می‌توان برای ایجاد ماسک حلقوی از همان ماتریس فاصله dist که بدست آوردیم استفاده کنیم.

با استفاده از ماتریس dist پیکسل هایی که فاصله‌شان از مرکز بزرگتر از 30 هست (ناحیه‌ی خارج از دایره داخلی حلقه) و پیکسل هایی که فاصله‌شان از مرکز کمتر از 50 هست (ناحیه‌ی داخل دایره‌ی خارجی حلقه) را پیدا کرده و حاصل and آن ها را بدست می‌آوریم. با اینکار ناحیه‌ی بین دو دایره‌ی داخلی و خارجی حلقه را انتخاب می‌کنیم.

شاید برای شما مفید باشد:
آموزش SDR و اجزای سیستم مخابراتی + بررسی RTL-SDR و HackRF

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر ماسک خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

با مشاهده ماسک رسم شده، می‌توان دید ناحیه‌ی حلقوی که می‌خواستیم را بدرستی توانسته‌ایم انتخاب کنیم.

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

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

ماسک مربعی با یک حفره‌ی دایروی

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

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر ماسک خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

سپس یک ماسک دیگر تعریف کرده و ناحیه‌ی دایروی با شعاع 50 پیکسل را انتخاب می‌کنیم. ماسک ناحیه‌ی مربع را با not ماسک دایره که بدست آوریم and کرده و نتیجه را در mask3 ذخیره می‌کنیم. با این ماسک یک ناحیه‌ی مربعی که شامل حفره است را می‌توانیم انتخاب کنیم.

در روش دیگر می توانستیم ناحیه‌ای که فاصله‌ی آنها از مرکز بزرگتر از 50 هست را انتخاب کرده و آن را با ماسک ناحیه‌ی مربع and کنیم (بدون اینکه نیاز باشد not ماسک را محاسبه کنیم).

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر ماسک خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

از mask3 استفاده کرده و این ناحیه از تصویر قسمت قبلی را انتخاب می‌کنیم و در کانال آبی قسمت انتخاب شده مقدار 255 را می‌نویسیم.

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

ترسیم دایره در مختصات دلخواه

برای اینکه دایره را در مرکز دیگری رسم کنیم کافیست پس از اینکه X و Y را از تابع meshgrid بدست آوردیم، از آن ها مقدار x و y مرکز مورد نظر برای دایره را کم کنیم. سپس فاصله هر پیکسل را حساب کرده و با آستانه گذاری ناحیه‌ی دایروی یا حلقوی مورد نظر را در آن نقطه انتخاب کنیم.

در مثال زیر یک دایره به شعاع 40 پیکسل را در نقطه‌ی 100 و 50 رسم می‌کنیم.

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

در همان مرکز یک دایره به شعاع 90 پیکسل را رسم می‌کنیم.

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

تصویر خروجی:

تولید ماسک دایروی و حلقوی در پردازش تصویر با پایتون

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

https://github.com/sphrk/array_indexing_examples_in_python

اطلاعات
14
0
0
اشتراک و حمایت
profile نویسنده: Sepehr Kouzegaran متخصص الکترونیک

ویراستار: حسین زنجانی زاده
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله