معرفی ماژول های پایتون برای پردازش تصاویر – قسمت چهارم
موسسه پایا پروژه به عنوان متصدی انجام پروژه های پردازش تصویر با پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی متلب مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری شما داشته باشد.
پکیج SciPy (سای پای) یک پکیج علمی و اوپن سورس مبتنی بر زبان پایتون است و برای انجام محاسبات علمی و مهندسی مورد استفاده قرار میگیرد. کتابخانهی SciPy بر مبنای کتابخانهی NumPy است و امکان کار با آرایههای n بُعدی را فراهم میکند. این کتابخانه برای کار با آرایههای Numpy ایجاد شده است و بسیاری از عملیات محاسباتی و بهینهسازی را به طور کارا ممکن میکند. هر دو پکیج Numpy و Scipy روی سیستم عاملهای موجود کار میکنند و به راحتی نصب میشوند. در این مقاله به آموزش کتابخانهی SciPy در پایتون خواهیم پرداخت و در پایان شما متوجه خواهید شد که SciPy چیست و میتوانید پروژهی خود را به کمک scipy شروع کرده و پیش ببرید.
۱ـ نصب کتابخانهSciPy
یکی از روشهای معمول نصب Scipy استفاده از دستور زیر است.
pip install pandas
اگر ما از توزیع پکیج آناکوندا استفاده کنیم، Scipy به طور پیشفرض در آن نصب شده است.
۲ـ پردازش تصویر با Scipy
زیرمجموعهی scipy_ndimage به پردازش تصویر اختصاص داده شده است و منظور از عبارت ndimage ، تصویر n بعدی است. و همچنین برخی از کارهای معمول که در پردازش تصویر انجام میگیرد، شامل موارد زیر است:
- ورودی/خروجی و نمایش تصویر
- تغییرات اولیه در عکس مثل برش تصویر، چرخش، تقسیم و …
- اعمال فیلترهای مختلف روی عکس مانند حذف نویز و sharp کردن و …
- قطعهبندی تصاویر یا سگمنت کردن: برچسبگذاری پیکسلها متناسب با آبجکتهای مختلف در عکس
- طبقهبندی یا کلاسبندی
- استخراج ویژگی ها
- رجیستر کردن تصاویر
حال ببینیم برخی از این مراحل با Scipy چگونه انجام میشوند.
۲ـ۱ باز کردن و نوشتن در فایلهای تصویری
پکیج misc در Scipy مجموعهای از عکسها را با خود به همراه دارد. میتوان از آن عکسها برای آموزش کار با تصاویر و اعمال تغییراتی در آنها استفاده کرد. نمونه کد زیر یک عکس را دریافت می کند و مجموعه های آرایه های آن را همراه با تصاویر نمایش می دهد:
from scipy import misc
()f = misc.face
misc.imsave(‘face.png’, f) # uses the Image module (PIL)
import matplotlib.pyplot as plt
plt.imshow(f)
()plt.show
و همچنین برنامهی بالا خروجی زیر را تولید میکند.

هر تصویری در فرمت خام خود ترکیبی از رنگهاست که توسط اعداد در قالب ماتریس نمایش داده میشوند. کامپیوتر تنها بر اساس آن اعداد تصاویر را درک و پردازش میکند. روش RGB جزو روشهای بسیار پرکاربرد و مرسوم در نمایش دادههاست.
به عنوان مثال اطلاعات آماری در خصوص تصویر بالا با کد زیر قابل استخراج است:
from scipy import misc
face = misc.face(gray = False)
print (face.mean(), face.max(), face.min())
و در نهایت برنامهی بالا خروجی زیر را تولید میکند که میانگین و ماکزیمم و مینیمم مقادیر از بردار RGB را استخراج میکند.

حال میدانیم که هر عکس از اعدادی ساخته شده است، پس هر تغییری در مقدار این اعداد، منجر به تغییر تصویر میشود. بیایید چند تغییر هندسی روی تصویر اعمال کنیم. از پایهایترین تغییرات هندسی روی تصاویر، برش یا crop کردن تصویر است. در کد زیر تصویر را از هر طرف به اندازهی 1/4 برش میزنیم.
from scipy import misc
face = misc.face(gray = True)
lx, ly = face.shape
# Cropping
crop_face = face[lx / 4: – lx / 4, ly / 4: – ly / 4]
import matplotlib.pyplot as plt
plt.imshow(crop_face)
()plt.show
برنامهی بالا، تصویر زیر را به عنوان خروجی تولید میکند.

همچنین میتوانیم تصویر خود را در جهت بالا به پایین بچرخانیم. به کد زیر توجه کنید:
# up <-> down flip
from scipy import misc
()face = misc.face
flip_ud_face = np.flipud(face)
import matplotlib.pyplot as plt
plt.imshow(flip_ud_face)
()plt.show
کد بالا تصویر را مانند شکل زیر میچرخاند:

همچنین از تابع rotate() میتوان برای چرخاندن عکس با مقدار زاویهی دلخواه استفاده کرد که نمونه آن، در کد زیر پیاده سازی شده است:
rotation#
from scipy import misc,ndimage
()face = misc.face
rotate_face = ndimage.rotate(face, 45)
import matplotlib.pyplot as plt
plt.imshow(rotate_face)
()plt.show
و خروجی به شکل زیر است:

