پردازش تصویر

پردازش تصویر در پایتون : (معرفی 10 کتابخانه برتر پردازش تصویر در python)

پردازش تصویر یا Image Processing یکی از شاخه های پرطرفدار و پرکاربرد در حوزه هوش مصنوعی و زندگی روزمره می باشد، در زبان پایتون نیز روش ها و ابزارهای مختلفی برای پردازش تصویر وجود دارد از جمله Opencv و کتابخانه PIL که در ادامه به بررسی روشها و ابزارها و آموزش پردازش تصویر در python خواهیم پرداخت.

[lwptoc min=”2″ depth=”6″ hierarchical=”1″ numeration=”decimal” numerationSuffix=”roundbracket” title=”محتوا” toggle=”0″ smoothScroll=”1″]

مقدمه : آشنایی با پردازش تصویر:

منظور ما از پردازش تصویر ( Image processing)  ، پردازش تصویر دیجیتال می باشد که شاخه‌ای از پردازش سیگنال است .

پردازش تصاویر دارای دو شاخه عمدهٔ می باشد :

  1. بهبود تصاویر ،
  2.  بینایی ماشین.

بهبود تصاویر دربرگیرندهٔ روش‌هایی چون استفاده از فیلتر محوکننده و افزایش تضاد برای بهتر کردن کیفیت دیداری تصاویر و اطمینان از نمایش درست آن‌ها در محیط مقصد (مانند چاپگر یا نمایشگر رایانه) می باشد.

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

تصویر دیجیتال :

تصویر دیجیتال(رقمی) از تعداد بسیار زیادی از مربع‌های کوچک، مشهور به پیکسل تشکیل شده‌است.

هر پیکسل دارای یک مقدار دیجیتال است که بیان‌گر مقدار روشنایی آن پیکسل است. روشنایی هر پیکسل با یک عدد بین 0 تا 255 مشخص میشود.

به این نوع تصاویر، تصاویر رَستِری (Raster Image) هم می‌گویند. هر تصویر رستری از تعدادی سطر و تعدادی ستون تشکیل شده‌است.

تصاویر با فرمت های مختلفی دیجیتالی میشوند مثلا تصاویر خاکستری یا GryScale که هر پیکسل آن فقط با یک عدد بین 0 تا 255 نشان داده میشود. یا تصاویر رنگی RGB که از سه رنگ قرمز (R) و سبز (G) و آبی (B) استفاده میکنند و هر پیکسل آن با سه عدد بین 0 تا 255 نمایش دهده میشود.

 

 

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

پردازش تصویر با پایتون با کتابخانه Numpy

کتابخانه Numpy یکی از کتابخانه‌های برنامه‌نویسی کلیدی در زبان برنامه‌نویسی پایتون محسوب می‌شود که پشتیبانی از «نوع داده‌ای آرایه» (Array Datatype) را در پایتون فراهم می‌کند.

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

به طور کلی، یک «تصویر» (Image) یک آرایه استاندارد قابل تعریف توسط کتابخانه Numpy محسوب می‌شود که شامل پیکسل‌های متناظر با نقاط داده‌ای خواهد بود. بنابراین، با استفاده از عملیات پایه‌ای تعریف شده در Numpy نظیر:

  • «بخش‌بندی» (Slicing)،
  • «پوشش گذاری» (Masking)،
  • «شاخص گذاری چندگانه» (Fancy Indexing)
  • و سایر موارد،

کاربر قادر خواهد بود تا مقادیر پیکسل‌های یک تصویر را تغییر دهد.

در کاربرد‌های پردازش تصویر با پایتون و کتابخانه Numpy، می‌توان از کتابخانه skimage برای بارگذاری تصاویر و از کتابخانه Matplotlib جهت نمایش آن‌ها استفاده کرد.

مثال از کار با تصویر با numpy

«پوشش گذاری تصاویر» (Image Masking): یکی از فرایندهای پایه‌ای در پردازش تصویر محسوب می‌شود که به وسیله آن، بخش‌هایی از یک تصویر پنهان و بخش‌های دیگر موجود در تصویر نمایان می‌شوند.

خروجی کد فوق به صورت زیر می باشد :

کتابخانه های پردازش تصویر با پایتون

کتابخانه Numpy در پایتون : آموزش کار با Numpy در python

 

کتابخانه SciPy در پایتون

کتابخانه SciPy یکی دیگر از کتابخانه‌های کلیدی برای برنامه‌نویسی علمی در زبان برنامه‌نویسی پایتون محسوب می‌شود (همانند Numpy).

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

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

به طور ویژه، زیر واحد scipy.ndimage توابع عملیاتی لازم جهت انجام عملیات روی آرایه‌های چندبُعدی NumPy (آرایه‌هایی که برای نمایش تصاویر، در قالب آرایه، مورد استفاده قرار می‌گیرند) را فراهم می‌آورد.

هم‌اکنون کتابخانه SciPy، توابع لازم برای:

  • «فیلتر گذاری خطی و غیرخطی» (Linear and Non-Linear Filtering)،
  • «مورفولوژی باینری» (Binary Morphology)،
  • «درون‌یابی تصویر» (Image Interpolation)
  • و «اندازه‌گیری اشیاء» (Object Measurement)

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

استفاده از کتابخانه SciPy جهت «تار کردن تصویر» (Image Blurring) با استفاده از «فیلتر گاوسی» (Gaussian Filter):

یکی از فرایندهای ساده پردازش تصویر با پایتون و کتابخانه SciPy، امکان اعمال فیلتر گاوسی روی تصاویر است که معمولا برای تار کردن (Blurring) تصاویر مورد استفاده قرار می‌گیرد.

خروجی کد فوق بصورت زیر می باشد:

پردازش تصویر با پایتون

کد زیر نیز مثال دیگری از اعمال فیتلر سوبل می باشد:

خروجی کد فوق نیز مشابه زیر می باشد:

کتابخانه های مهم پردازش تصویر پایتون

پردازش تصاویر در پایتون با کتابخانه SciKit-Image

ابزار SciKit-Image، یک بسته برنامه‌نویسی «منبع باز» (Open Source) است که با ساختار آرایه‌ای تعریف شده توسط کتابخانه NumPy کار می‌کند.

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

در بسته SciKit-Image، مجموعه‌ای از الگوریتم‌ها و ابزارهای پردازش تصویر، جهت استفاده در کاربردهای تحقیقاتی، آموزشی و صنعتی در اختیار کاربران قرار داده شده است.

کتابخانه Scikit-image : آموزش پردازش تصویر در پایتون با Scikit-image

 

کتابخانه‌های PIL و Pillow برای پردازش تصویر در پایتون

کتابخانه PIL که به کتابخانه تصویر پایتون معروف است،  مخفف عبارت Python Imaging Library می باشد. کتابخانه PIL یکی از کتابخانه‌های پردازش تصویر با پایتون محسوب می‌شود. با این حال، توسعه آن از سال 2009 دچار وقفه شده است.

اما نسخه گسترش یافته آن یعنی کتابخانه Pillow در زبان پایتون همچنان پشتبیانبی میشود .

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

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

کتابخانه PIL و Pillow برای پردازش تصویر

 

کتابخانه OpenCV-Python

کتابخانه OpenCV که مخفف Open Source Computer Vision Library یا کتابخانه منبع باز بینایی کامپیوتر است، یکی از پراستفاده‌ترین کتابخانه‌های برنامه‌نویسی برای کاربردهای «بینایی کامپیوتر» (Computer Vision) محسوب می‌شود.

کتابخانه OpenCV-Python، واسط برنامه‌نویسی کاربردی (API) برای کتابخانه OpenCV در زبان پایتون محسوب می‌شود.

این کتابخانه نه تنها از سرعت بسیار بالایی برخوردار است (زیرا کدهای پیاده‌سازی آن توسط زبان C و C++‎ نوشته شده است)، بلکه کد نویسی برنامه‌های کاربردی مرتبط با پردازش تصویر با پایتون و به‌کاراندازی (Deploy) آن‌ها را تسهیل می‌بخشد.

چنین ویژگی‌هایی، کتابخانه OpenCV-Python را به بهترین انتخاب جهت پردازش تصویر با پایتون و پیاده‌سازی برنامه‌های بینایی کامپیوتر در این زبان بدل کرده است (به ویژه اگر برنامه‌های بینایی کامپیوتر توسعه داده شده، به انجام محاسبات ریاضی پیچیده و سنگین نیاز داشته باشند) .

در ادامه، برخی از فرایندهای پردازش تصویر با پایتون که توسط کتابخانه OpenCV-Python قابل انجام است، نمایش داده خواهد شد.

«ترکیب تصاویر» (Image Blending): با استفاده از قابلیتی به نام «هرم تصاویر» (Image Pyramid) در OpenCV-Python، می‌توان تصاویر متناظر با یک سیب و یک پرتقال را با یکدیگر ترکیب و یک تصویر جدید درست کرد.

خروجی کد فوق بصورت زیر خواهد بود.

تصویر پردازش شده با پایتون

 

کتابخانه SimpleCV برای پردازش تصویر در پایتون

کتابخانه SimpleCV یکی دیگر از چارچوب‌های منبع باز جهت پردازش تصویر با پایتون و پیاده‌سازی برنامه‌های کاربردی مرتبط با حوزه بینایی کامپیوتر محسوب می‌شود.

با استفاده از این کتابخانه، کاربران قادر خواهند بود به برخی از کتابخانه‌های سطح بالای بینایی کامپیوتر نظیر OpenCV دسترسی داشته باشند.

ویژگی مهم این کتابخانه این است که کاربران مبتدی، بدون این که لازم باشد تا اطلاعات و دانش کافی در مورد مفاهیمی نظیر «عمق‌های بیتی» (Bit Depths)، فرمت‌های فایلی (File Format)، «فضاهای رنگی» (Color Spaces) و سایر موارد داشته باشند، به راحتی قادر به کار کردن با این کتابخانه و انجام عملیات پردازش تصویر با پایتون خواهند بود. بازه یادگیری کتابخانه SimpleCV به مراتب کوتاه‌تر از OpenCV است. برخی از مزایای این کتابخانه عبارتند از:

برنامه‌نویسان مبتدی، به راحتی قادر به نوشتن برنامه‌های مرتبط با بینایی کامپیوتر توسط این کتابخانه هستند.
این کتابخانه، توانایی کار کردن با جریان‌های ویدئویی (Video Streams)، تصاویر، فایل‌های ویدئویی و سایر موارد را دارد (به عبارت دیگر، با انواع فایل‌ها و فرمت‌های ویدئویی و تصویری سازگار است).
در ادامه، برخی از فرایندهای پردازش تصویر با پایتون که توسط کتابخانه SimpleCV قابل انجام است، نمایش داده خواهد شد.

تابع «آستانه‌گذاری» (Thresholding): تصویر زیر، نحوه عملکرد تابع Thresholding در کتابخانه SimpleCV را نشان می‌دهد. این تابع، هر کدام از پیکسل‌های یک تصویر را بسته به میزان «روشنایی» (Brightness) آن‌ها، سفید یا سیاه می‌کند.

تصویر پردازش شده بصورت زیر خواهد شد:

شروع کار پردازش تصویر با پایتون

 

کتابخانه Mahotas برای پردازش تصویر با پایتون

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

در این کتابخانه، علاوه بر اینکه توابع پردازش تصویر مرسوم نظیر «فیلتر گذاری» (Filtering) و «عملیات مورفولوژیکی» (Morphological Operations) تعریف شده است، تعدادی توابع بینایی کامپیوتر مدرن جهت «محاسبه ویژگی» (Feature Computation) نظیر «تشخیص نقاط مهم» (Interest Point Detection) و «توصیف کننده‌های محلی» (Local Descriptors) نیز گنجانده شده است.

واسط برنامه‌نویسی این کتابخانه توسط زبان پایتون نوشته شده است (که برای توسعه سریع برنامه‌های کاربردی مرتبط با پردازش تصویر با پایتون و یا برنامه‌های بینایی کامپیوتر بسیار مناسب است)، ولی الگوریتم‌ها در زبان C++‎ پیاده‌سازی شده‌اند (که سبب افزایش سرعت اجرای کدهای این کتابخانه می‌شود).

همچنین، کتابخانه Mahotas علاوه بر اینکه سرعت بالایی دارد، «وابستگی‌های» (Dependencies) برنامه‌نویسی بسیار کمی دارد.

در ادامه، برخی از فرایندهای پردازش تصویر با پایتون که توسط کتابخانه Mahotas قابل انجام است، نمایش داده خواهد شد.

حل مسأله «پیدا کردن والی» (Finding Wally) توسط کتابخانه Mahotas: هدف از این مسأله پیدا کردن شخصیت والی (Wally) در تصویر زیر است.

کتابخانه SimpleITK برای پردازش تصویر با python

کتابخانه SimpleITK، یک سیستم منبع باز و «چند سکویی» (Cross-Platform) است که مجموعه‌ای کامل از ابزارهای نرم‌افزاری جهت تحلیل تصاویر دیجیتال را در اختیار برنامه‌نویسان و توسعه‌دهندگان قرار می‌دهد.

ویژگی مهم کتابخانه SimpleITK، پشتیبانی از تعداد زیادی مؤلفه نرم‌افزاری است که برای انجام عملیات پردازشی نظیر فیلتر گذاری، «قطعه‌بندی تصاویر» (Image Segmentation) و «ثبت تصویر» (Image Registration) روی تصاویر دیجیتالی مورد استفاده قرار می‌گیرند.

این کتابخانه به زبان C++‌‎ نوشته شده است ولی برای دامنه وسیعی از زبان‌های برنامه‌نویسی، از جمله پایتون منتشر شده است.

در ادامه، برخی از فرایندهای پردازش تصویر با پایتون که توسط کتابخانه SimpleITK قابل انجام است، نمایش داده خواهد شد.

کاربرد کتابخانه SimpleITK: مصورسازی فرایند از نوع سخت ثبت تصاویر CT/MR (فرایند Rigid CT/MR Registration)، که توسط کتابخانه SimpleITK و زبان پایتون (پردازش تصویر با پایتون) توسعه داده شده است.

 

 

کتابخانه pgmagick  برای پردازش تصویر

کتابخانه pgmagick، یک Wrapper توسعه داده شده جهت استفاده از کتابخانه GraphicsMagick در زبان پایتون محسوب می‌شود.

کتابخانه GraphicsMagick، یک سیستم پردازش تصویر است که به دلیل امکانات فوق‌العاده و گسترده، به آن «چاقوی سوئیسی» (Swiss Knife) پردازش تصویر نیز گفته می‌شود.

در این کتابخانه، مجموعه‌ای گسترده و قدرتمند از ابزارها و کتابخانه‌های برنامه‌نویسی (جهت پردازش تصویر) تعبیه شده است که از امکاناتی نظیر خواندن، نوشتن و دستکاری تصاویر دیجیتالی در بیش از 88 فرمت تصویری عمده نظیر GIF ،JPEG ،JPEG-2000 ،PNG ،TIFF و سایر موارد پشتیبانی می‌کند.

در ادامه، برخی از فرایندهای پردازش تصویر با پایتون که توسط کتابخانه pgmagick قابل انجام است، نمایش داده خواهد شد.

«مقیاس‌گذاری تصویر» (Image Scaling):

ابزار Pycairo برای پردازش تصویر

ابزار Pycairo، مجموعه‌ای از «مقیدسازی‌های» (Bindings) توسعه داده شده در زبان پایتون، جهت استفاده از کتابخانه گرافیکی Cairo است.

کتابخانه Cairo نیز یک کتابخانه گرافیکی دوبُعدی جهت رسم گرافیک‌های برداری محسوب می‌شود. «گرافیک‌های برداری» (Vector Graphics) از آن جهت حائز اهمیت هستند که در اثر فرایندهای پردازشی نظیر «تغییر اندازه» (Resize) یا «تبدیل» (Transformation)، وضوح خود را از دست نمی‌دهند.

ابزار Pycairo برای فراخوانی دستورات کتابخانه Cairo در زبان پایتون به کار می‌رود.

در ادامه، برخی از فرایندهای پردازش تصویر با پایتون که توسط کتابخانه Pycairo قابل انجام است، نمایش داده خواهد شد.

رسم خط با استفاده از ابزار Pycairo: خط، یکی از ساده‌ترین گرافیک‌های برداری محسوب می‌شود. برای رسم یک خط، دو تابع از ابزار Pycairo باید فراخوانی شوند.

نقطه آغازین خط، توسط فراخوانی تابع move_to()‎ مشخص می‌شود. نقطه پایانی یک خط نیز توسط فراخوانی به تابع line_to()‎ مشخص می‌شود.

 

فهرست منابع :

ویکیپدیا

فرادرس

 

 

 

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

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