در قسمت قبل با نحوهی پیاده سازی فیلتر میانه و تولید نویز ضربه ای به روش گوسی ترکیبی در پایتون آشنا شدیم. در این قسمت از آموزش میخواهیم به کاربرد Array Indexing هنگام کارکردن با تصاویر بپردازیم. در این آموزش با نحوهی بدست آوردن برشی از تصویر و تغییر مقدار پیکسل های قسمت انتخاب شده در تصویر آشنا میشویم.
کد های پایتون نوشته شده در این آموزش، در یک فایل ژوپیتر نوت بوک نوشته شده اند. لینک دانلود فایل ژوپیتر نوت بوک مربوط به این آموزش در انتهای صفحه قرار داده شده است.
برای تعریف آرایه ها، کتابخانه numpy برای ترسیم نمودار، کتابخانه matplotlib و برای خواندن تصویر کتابخانه cv2 را import میکنیم.

میخواهیم یک تصویر سیاه با ارتفاع 100 و عرض 150 پیکسل ایجاد کنیم. با استفاده از تابع zeros یک ماتریس سه بعدی با ابعاد مورد نظر تعریف میکنیم. چون میخواهیم تصویر به صورت RGB باشد، بعد سوم را 3 در نظر میگیریم (3 کانال برای R، G و B). با imshow ماتریس را نمایش میدهیم.

تصویر خروجی:

میخواهیم رنگ تصویر را به قرمز تغییر دهیم. کانال Red را انتخاب کرده (اندیس صفر در بعد سوم) و مقدار همهی پیکسل های این کانال را به بیشترین مقدار یعنی 255 تغییر میدهیم.

تصویر خروجی:

میخواهیم ستونهای 20 تا 70 از ماتریس یا به عبارت دیگر پیکسل های 20 تا 70 در راستای عرض تصویر را به رنگ آبی تغییر دهیم. برای اینکار همهی سطرها و ستون های 20 تا 70 را انتخاب میکنیم همچنین از بعد سوم اندیس 2 را انتخاب میکنیم (کانال Blue) و مقدار این برش از تصویر را به 255 تغییر میدهیم تا این قسمت از تصویر با رنگ آبی نمایش داده شود.

تصویر خروجی:

در تصویر قبلی که ایجاد کردیم، میخواهیم یک مستطیل سبز رنگ با عرض 60 و ارتفاع 30 پیکسل ایجاد کنیم. مختصات گوشهی سمت چپ بالای این مستطیل را (80, 10) در نظر میگیریم. سطرها و ستون های مورد نظر را انتخاب کرده و کانال سبز (اندیس 1 در بعد سوم) را انتخاب میکنیم و مقدار این پیکسل ها را به 255 تغییر میدهیم.

تصویر خروجی:

اگر مقدار پیکسلهای انتخاب شده در همهی کانال ها را به 255 تغییر دهیم، مستطیل رسم شده به رنگ سفید نمایش داده میشود.

تصویر خروجی:

در تصویر سیاه که در ابتدا ایجاد کردیم، میخواهیم ربع اول آن به رنگ سفید، ربع دوم به رنگ قرمز، ربع سوم تصویر به رنگ آبی و ربع چهارم هم به رنگ سبز نمایش داده شود. برای پیاده سازی هر قسمت این مثال ابتدا سطر و ستون های مورد نظر را انتخاب کرده و در کانال مورد نظر مقدار 255 را مینویسیم.

تصویر خروجی:

الان میخواهیم یک تصویر را از فایل خوانده و روی آن تغییرات اعمال کنیم. از تصویر baboon استفاده میکنیم. برای خواندن تصویر از cv2.imread استفاده میکنیم. کتابخانهی cv2 تصویر را در فرمت BGR میخواند در حالی که کتابخانهی matplotlib موقع نمایش تصویر با imshow، تصویر را در فرمت RGB در نظر میگیرد. برای اینکه موقع نمایش تصویر، خروجی به درستی نشان داده شود با استفاده از cvtColor تصویر خوانده شده را به فرمت RGB تبدیل میکنیم.

تصویر خروجی:

میخواهیم برشی از تصویر را بدست آورده و آن را نمایش دهیم. در راستای ارتفاع تصویر از ابتدا تا نصف آن و در راستای عرض تصویر از 250 تا 450 را انتخاب می کنیم.
![]()
تصویر خروجی:

میخواهیم ربع اول از تصویر را انتخاب کرده و کانال های قرمز و سبز را حذف کنیم (مقدار پیکسلهای کانال قرمز و سبز را به صفر تغییر دهیم). سطر ها و ستون های متناظر برای انتخاب شدن ربع اول را انتخاب کرده و از بعد سوم اندیس های 0 و 1 را انتخاب میکنیم (کانال قرمز و سبز). مقدار پیکسل های انتخاب شده را به صفر تغییر میدهیم. با بررسی خروجی میتوان مشاهده کرد که فقط پیکسل های کانال آبی در ربع اول باقی مانده است.
تصویر خروجی:

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

تصویر خروجی:

میخواهیم ربع سوم از تصویر به صورت سیاه سفید نمایش داده شود. چون تصویر در فرمت RGB میباشد بنابراین برای اینکه در این فرمت، تصویر به صورت سیاه سفید نمایش داده شود کافیست مقدار یکسان در همهی کانال های یک پیکسل قرار دهیم. به صورت ساده میتوان این مقدار gray level را برای هر پیکسل، با میانگین گرفتن مقدار پیکسل هر سه کانال بدست آوریم.
ربع سوم تصویر (قسمت مورد نظر) را انتخاب کرده و در راستای بعد سوم (بعد کانال) میانگینگیری میکنیم و مقدار میانگین پیکسل در هر سه کانال را بدست میآوریم (np.mean(img[height//2:, :width//2, :], axis=2)). مقادیر بدست آمده از نوع float میباشد، با استفاده از astype مقادیر را به نوع int تبدیل میکنیم. میانگین گیری در بعد سوم، باعث میشود بعد سوم حذف شود و در خروجی یک ماتریس دو بعدی بدست آوریم. برای اینکه بتوانیم مقدار پیکسل ها در ربع سوم را تغییر دهیم بایستی این ماتریس را به یک ماتریس سه بعدی تبدیل کنیم. با reshape به ماتریس، بعد سوم را اضافه میکنیم. در قسمت انتخاب شده مقادیر میانگین بدست آمده را قرار میدهیم.

تصویر خروجی:

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