بارمان ویژنcropped-BARMAN-VISION-ICO-LOGO.pngبارمان ویژنبارمان ویژن
  • آموزشگاه بینایی
  • پروژه‌ها
  • تجهیزات بینایی ماشین
    • دوربین اسکن خطی
    • دوربین مینیاتوری
      • دوربین ‌GigE مینیاتوری
      • دوربین USB3 مینیاتوری
      • دوربین ‌USB2 مینیاتوری
    • دوربین ‌پزشکی
  • راهکار بینایی
  • بلاگ
✕

پردازش تصویر – پردازش تصویر چیست؟

  • صفحه اصلی
  • آموزش پردازش تصویر ‌‌OpenCV
  • پردازش تصویر – پردازش تصویر چیست؟
Basler AG logo
باسلر (Basler AG)
۱۴ مرداد ۱۴۰۰
cognex corporation
شرکت کاگنکس (Cognex Corporation)
۰۵ شهریور ۱۴۰۰
منتشر شده توسط محمد کیانی در ۳۰ مرداد ۱۴۰۰
موضوعات
  • ‌‌OpenCV
  • پردازش تصویر
برچسب‌ها
  • image processing
  • Mahotas
  • opencv
  • Pillow
  • Scikit Image
  • SciPy
  • SimpleITK

فهرست محتوا

  • پردازش تصویر چیست-مقدمه‌ای بر پردازش تصویر
  • کتابخانه‌های مورد استفاده برای پردازش تصویر
      • مستندات Scikit Image
      • مستندات SciPy
      • مستندات Pillow
      • مستندات OpenCV
      • مستندات Mahotas
      • مستندات SimpleITK
  • چرا ما به پردازش تصویر نیاز داریم؟
    • پردازش تصویر به‌صورت عمده شامل سه‌گام زیر می‌شود
  • گام‌هایی در پردازش تصویر
    • دریافت تصویر
    • ترمیم تصویر
    • پردازش تصویر رنگی
    • پردازش موجک و راهکارهای چندگانه
    • فشرده‌سازی تصویر
    • تشخیص کاراکتر
  • پیش‌نیاز
    • پایتون
    • OpenCV
  • نصب کتابخانه‌ها
  • پردازش تصویر با OpenCV
    • چگونه تصویر را به معادل خاکستری آن تبدیل کنیم؟
    • جداسازی تمامی کانال‌های رنگ در یک تصویر
    • انتقال تصویر
    • چرخش تصویر
    • تغییر اندازه تصویر
    • مات سازی تصویر توسط Pillow
    • تغییر مقیاس تصویر
    • تشخیص لبه توسط Canny
    • بهبود تصویر توسط PIL – Pillow
  • کاربرد پردازش تصویر
  • تشخیص رنگ توسط OpenCV-Python
    • گام ۱: نصب کتابخانه‌های موردنیاز مانند CV2، Numpy، Pandas و aargparse
    • گام ۲: در برنامه پایتون ما از آرگومان‌ها برای دریافت تصویر از ورودی کاربر در ترمینال استفاده می‌کنیم.
    • گام ۳: با خواندن فایل CSV شروع می‌کنیم (colors.csv)
    • گام ۴: فهم آنچه در فایل CSV است.  دستور .info() را بر روی داده‌ها به‌منظور بررسی انواع داده و مقادیر حاضر را اجرا کنید.
    • گام ۵: به‌منظور شناسایی مقادیر خالی ما از isna() به همراه sum() استفاده می‌کنیم.
    • گام ۶: فهم کد
    • تابع  getColorName(R,G,B)
    • تابع draw_function()
  • کاربردهای پردازش تصویر

پردازش تصویر چیست-مقدمه‌ای بر پردازش تصویر

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

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

پردازش تصویر شامل گام‌های زیر می‌شود:

واردکردن یک تصویر از اسکنر نوری و یا دوربین عکس‌برداری.

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

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

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

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

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

  • Scikit-image
  • OpenCV
  • Mahotas
  • SimplelTK
  • SciPy
  • Pillow
  • Matplotlib

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

مستندات Scikit Image

https://scikit-image.org/docs/stable/

SciPy

SciPy یکی از ماژول‌های اساسی پایتون (همچون NumPy) است که می‌تواند برای وظایف پردازشی مورداستفاده قرار بگیرد. خصوصاً ماژول scipy.ndimage ( در SciPy نسخه ۱.۱.۰) توابعی ارائه می‌دهد که می‌توانند بر روی آرایه‌های n-بعدی NumPy مورداستفاده قرار بگیرند. این بسته هم‌اکنون شامل توابع فیلترینگ آنلاین و آفلاین، ریخت‌شناسی باینری، انتقال B-spline و رتبه دهی اشیا است.

مستندات SciPy

https://www.scipy.org/docs.html

Pillow

کتابخانه PIL (Python Imaging Library) کتابخانه برنامه‌نویسی رایگان پایتون است که پشتیبانی از اجرا، مدیریت و ذخیره تصاویر در فرمت‌های مختلف را فراهم می‌سازد. توسعه این کتابخانه متوقف‌شده است. آخرین نسخه در سال ۲۰۰۹ منتشرشده است. خوشبختانه کتابخانه Pillow موجود است. چیزی شبیه به PIL. با نصب راحت و قابلیت عملکرد در بیشتر سیستم‌عامل‌ها به همراه پشتیبانی از پایتون ۳ و تبدیل فضای رنگ

مستندات Pillow

https://pillow.readthedocs.io/en/3.1.x/index.html

کتابخانه OpenCV (Open Source Computer Vision Library) یکی از مورداستفاده‌ترین کتابخانه‌ها در حوزه بینایی کامپیوتر است. OpenCV-Python رابط برنامه‌نویسی (API) برای پایتون است. OpenCV-Python به‌تنهایی اجرا نمی‌شود. چراکه OpenCV با زبان C/C++ نوشته‌شده است. اما به‌وسیله ویژگی‌های منعطف پایتون و ساختار آن می‌توانید از این کتابخانه باقدرت بیشتر در پایتون استفاده کنید.

مستندات OpenCV

https://docs.opencv.org/master/d6/d00/tutorial_py_root.html

Mahotas

Mahotas یک ویرایشگر گرافیکی و کامپیوتری پایتون است. این ابزار شامل توابع سنتی پردازش تصویر مانند فیلترگذاری و توابع ریخت‌شناسی و همچنین توابع محاسباتی مدرن مانند تعریف موقعیت و نقطه موردنظر است. نمایش در محیط پایتون صورت می‌پذیرد که برای توسعه سریع مناسب  است. اما الگوریتم‌ها برای سرعت بیشتر در اجرا با زبان C++ اجرا می‌شوند. کتابخانه Mahotas سریع با کد کم است.

مستندات Mahotas

https://mahotas.readthedocs.io/

ITK (Insight Segmentation and Registration Toolkit) سیستم میانبر متن‌باز است که برای توسعه‌دهنده‌ها مجموعه‌ای از ابزارهای نرم‌افزاری آنالیز تصویر را فراهم می‌سازد. این ابزارها در زبان برنامه‌نویسی شما در دسترس خواهند بود. “این مجموعه همچنین ابزار آنالیز تصویری است همراه با شمار زیادی از ویژگی‌ها که شامل فیلترینگ استاندارد، طبقه‌بندی تصاویر و رجیستریشن تصویر است. SimpleITK تحت زبان C++ نوشته‌شده است اما در شمار زیادی از زبان‌های برنامه‌نویسی ازجمله پایتون قابل‌استفاده است.

مستندات SimpleITK

https://simpleitk.readthedocs.io/en/master/

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

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

همچنین مقاله “مبانی پردازش تصویر دیجیتال” را بخوانید.

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

پردازش تصویر به‌صورت عمده شامل سه‌گام زیر می‌شود

  • فراخوانی تصویر به کمک ابزارهای آشکارساز تصویر
  • کاوش و دست‌کاری تصویر
  • خروجی که می‌تواند فراخوانی شود و یا گزارشی که بر روی آنالیز تصویر ارائه شود

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

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

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

  • بهبود تصویر برای درک انسان

هدف – بهبود موضوعی کیفیت تصویر

  • بهبود تصویر برای درک ماشین

هدف – ساده‌سازی تشخیص و آنالیز مجموعه تصاویر

  • انتقال تصویر به دلایل فنی

به‌طور مثال برای تغییر رزولوشن و جهت و نمایش بر روی صفحات موبایل

گام‌هایی در پردازش تصویر

دریافت تصویر

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

ترمیم تصویر

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

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

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

پردازش موجک و راهکارهای چندگانه

زمانی که شما تصویر و اجزا درون آن مانند اتمسفر، ابرها، درختان و گل‌ها را مورد تجزیه‌وتحلیل قرار می‌دهید. شما از سطح متفاوتی در توپوگرافی استفاده می‌کنید. موجک مانند استفاده از آن قلم‌های متفاوت است. تبدیل موجک، ابزاری مؤثر برای باز ارائه تصویر است. تبدیل موجک اجازه می‌دهد تا سرمایه‌گذاری بر روی راهکارهای مختلف در تصویر مورد استفاده قرار بگیرد.

فشرده‌سازی تصویر

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

تشخیص کاراکتر

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

پیش‌نیاز

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

یکی از اموری که شما حتماً باید پیرو این آموزش بدانید این است که تصویر چگونه در حافظه ارائه می‌شود. هر تصویر با مجموعه‌ای از پیکسل‌ها ارائه می‌شوند. ماتریس مقادیر پیکسل. مقادیر محدوده پیکسل‌های تصویر خاکستری از محدوده بین ۰ تا ۲۵۵ است و شدت روشنایی برای پیکسل را ارائه می‌کند. برای مثال اندازه تصویر 20*20 تصویر است. این تصویر در ماتریسی 20*20 (مجموع ۴۰۰ پیکسل) باز ارائه می‌شود.

اگر شما در حال کار با تصاویر رنگی هستید. باید بدانید که شما دارای سه کانال (قرمز، سبز و آبی (RGB)) هستید. بنابراین سه ماتریس برای یک تصویر وجود خواهد داشت.

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

پایتون

یک زبان برنامه‌نویسی شیءگرا، تفسیری، سطح بالا، و همه‌منظوره است، که خیدو فان روسوم آن را طراحی کرده‌ است، و اولین بار در سال ۱۹۹۱ منتشرشده است. فلسفه اصلی طراحی پایتون «خوانایی بالای کد» است و نویسه‌های فاصله خالی در آن معنادار هستند و مکرر استفاده می‌شوند. ساختار زبانی و دیدگاه شیءگرا در پایتون به‌گونه‌ای طراحی‌شده است که به برنامه‌نویس امکان نوشتن کد منطقی و واضح (بدون ابهام) را برای پروژه‌های کوچک و بزرگ می‌دهد.

OpenCV

گاهی اینکه پردازش تصویر چیست را شما می‌توانید با سوال OpenCV چیست هم رده بدانید. OpenCV کتابخانه‌ای عظیم و متن‌باز برای بینایی کامپیوتر، یادگیری ماشین و پردازش تصویر است که اکنون نقش اصلی را در انجام عملیات به لحظه در سامانه‌ها ایفا می‌کند. بدین‌وسیله می‌توان تصاویر و فیلم‌ها را برای تشخیص اشیا، چهره یا دست خط مورد پردازش قرارداد. OpenCV با کتابخانه‌های متنوعی مانند Numpy یکپارچه می‌شود. کتابخانه‌های پایتون قادر هستند تا ساختار آرایه‌های OpenCV را مورد تجزیه‌وتحلیل قرار دهند. در این زمینه مقاله ما درباره ” OpenCV چیست” را از دست ندهید!

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

نصب کتابخانه‌ها

برای نصب بسته‌های کتابخانه‌ای که در بخش‌های پیشین مقاله پردازش تصویر جیست که ذکر کردیم. مطمئن شوید که نسخه بروز پایتون ۳ را بر روی رایانه خود نصب‌کرده‌اید.

برای سیستم‌های ویندوز و لینوکس:

  • pip install opencv-python
  • pip install scikit-image
  • pip install mahotas
  • pip install scipy
  • pip install Pillow
  • pip install matplotlib

برای لینوکس:

  • sudo apt-get install libopencv-dev python-opencv
  • sudo apt-get install python-skimage
  • sudo apt-get install python-mahotas
  • sudo apt-get install python-scipy
  • sudo apt-get install python-Pillow
  • sudo apt-get install python-matplotlib

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

  • import package_name

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

Data Science Toolkit

https://www.anaconda.com/products/individual

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

تصویر اصلی

				
					#Import the Header File
import cv2
#Reading Image file from File Location
img = cv2.imread(‘image.jpg’) 
#Functions to find out generic properties of an Image
print("Image Properties") 
print("Number of Pixels: " + str(img.size)) 
print("Shape/Dimensions: " + str(img.shape))
#Output
Image Properties
Number of Pixels: 60466176
Shape/Dimensions: (5184, 3888, 3)

				
			
				
					import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('image.jpg') // Combination of all colors 
b,g,r = cv2.split(img)       # get b,g,r
rgb_img = cv2.merge([r,g,b])
plt.imshow(rgb_img)
x,y,z = np.shape(img)
red = np.zeros((x,y,z),dtype=int)
green = np.zeros((x,y,z),dtype=int)
blue = np.zeros((x,y,z),dtype=int)
for i in range(0,x):
    for j in range(0,y):
        red[i][j][0] = rgb_img[i][j][0]
        green[i][j][1]= rgb_img[i][j][1]
        blue[i][j][2] = rgb_img[i][j][2]
 
 
plt.imshow(red)  // red color image ( fig 2)
plt.imshow(green)  // green color image ( fig 3)
plt.imshow(blue)  // Blue color image ( fig 4)
#Now we will again create the original image from these Red, Blue and Green Images
retrack_original = np.zeros((x,y,z),dtype=int)
for i in range(0,x):
    for j in range(0,y):
        retrack_original[i][j][0] = red[i][j][0]
        retrack_original[i][j][1] = green[i][j][1]
        retrack_original[i][j][2] = blue[i][j][2]
cv2.imwrite('ori.jpg',retrack_original) 
plt.imshow(retrack_original)

				
			

خروجی کد بالا

شکل ۱: ترکیب تمامی رنگ‌ها

شکل ۲: رنگ قرمز

شکل ۳: رنگ سبز

شکل ۴: رنگ آبی

چگونه تصویر را به معادل خاکستری آن تبدیل کنیم؟

مثالی ساده از اینکه پردازش تصویر چیست:

				
					import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
 
img = cv.imread('image.jpg')
gray_image = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
 
fig, ax = plt.subplots(1, 2, figsize=(16, 8))
fig.tight_layout()
 
ax[0].imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
ax[0].set_title("Original")
 
ax[1].imshow(cv.cvtColor(gray_image, cv.COLOR_BGR2RGB))
ax[1].set_title("Grayscale")
plt.show()

				
			

جداسازی تمامی کانال‌های رنگ در یک تصویر

				
					b, g, r = cv.split(img)
 
fig, ax = plt.subplots(1, 3, figsize=(16, 8))
fig.tight_layout()
 
ax[0].imshow(cv.cvtColor(r, cv.COLOR_BGR2RGB))
ax[0].set_title("Red")
 
ax[1].imshow(cv.cvtColor(g, cv.COLOR_BGR2RGB))
ax[1].set_title("Green")
 
ax[2].imshow(cv.cvtColor(b, cv.COLOR_BGR2RGB))
ax[2].set_title("Blue")

				
			

انتقال تصویر

				
					h, w = img.shape[:2]
 
half_height, half_width = h//4, w//8
transition_matrix = np.float32([[1, 0, half_width],
                               [0, 1, half_height]])
 
img_transition = cv.warpAffine(img, transition_matrix, (w, h))
 
plt.imshow(cv.cvtColor(img_transition, cv.COLOR_BGR2RGB))
plt.title("Translation")
plt.show()

				
			

چرخش تصویر

				
					h, w = img.shape[:2]
 
rotation_matrix = cv.getRotationMatrix2D((w/2,h/2), -180, 0.5)
 
rotated_image = cv.warpAffine(img, rotation_matrix, (w, h))
 
plt.imshow(cv.cvtColor(rotated_image, cv.COLOR_BGR2RGB))
plt.title("Rotation")
plt.show()

				
			

تغییر اندازه تصویر

				
					fig, ax = plt.subplots(1, 3, figsize=(16, 8))
 
# image size being 0.15 times of it's original size
image_scaled = cv.resize(img, None, fx=0.15, fy=0.15)
ax[0].imshow(cv.cvtColor(image_scaled, cv.COLOR_BGR2RGB))
ax[0].set_title("Linear Interpolation Scale")
 
# image size being 2 times of it's original size
image_scaled_2 = cv.resize(img, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)
ax[1].imshow(cv.cvtColor(image_scaled_2, cv.COLOR_BGR2RGB))
ax[1].set_title("Cubic Interpolation Scale")
 
# image size being 0.15 times of it's original size
image_scaled_3 = cv.resize(img, (200, 400), interpolation=cv.INTER_AREA)
ax[2].imshow(cv.cvtColor(image_scaled_3, cv.COLOR_BGR2RGB))
ax[2].set_title("Skewed Interpolation Scale")

				
			

مات سازی تصویر توسط Pillow

				
					from PIL import Image
from PIL import ImageFilter
# Open Existing Image
OrgImage = Image.open("image.jpg")
# Apply Simple Blur Filter
blurImage = OrgImage.filter(ImageFilter.BLUR)
blurImage.show()
# blurImage.save("output1.jpg")
# Apply BoxBlur Filter
boxImage = OrgImage.filter(ImageFilter.BoxBlur(2))
boxImage.show()
# boxImage.save("output2.jpg")
# Apply GaussianBlur Filter
gaussImage = OrgImage.filter(ImageFilter.GaussianBlur(2))
gaussImage.show()
# gaussImage.save("output3.jpg")

				
			

تغییر مقیاس تصویر

				
					import cv2 
import numpy as np 
import matplotlib.pyplot as plt  
# This is a magic command to display in an external window 
  
image = cv2.imread("image.jpg", 1) 
# Loading the image 
  
half = cv2.resize(image, (0, 0), fx = 0.1, fy = 0.1) 
bigger = cv2.resize(image, (1050, 1610)) 
  
stretch_near = cv2.resize(image, (780, 540),  
               interpolation = cv2.INTER_NEAREST) 
  
  
Titles =["Original", "Half", "Bigger", "Interpolation Nearest"] 
images =[image, half, bigger, stretch_near] 
count = 4
  
for i in range(count): 
    plt.subplot(2, 2, i + 1) 
    plt.title(Titles[i]) 
    plt.imshow(images[i]) 
  
plt.show() 

				
			

تشخیص لبه توسط Canny

				
					import cv2
import numpy as np
from matplotlib import pyplot as plt
 
img = cv2.imread('image.jpg',0)
edges = cv2.Canny(img,100,200)
 
plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
 
plt.show()

				
			

بهبود تصویر توسط PIL – Pillow

				
					from PIL import Image,ImageFilter  
#Read image
im = Image.open('image.jpg')
#Display image  
im.show()
from PIL import ImageEnhance  
enh = ImageEnhance.Contrast(im)  
enh.enhance(1.8).show("30% more contrast")

				
			

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

در پاسخ عملی به اینکه پردازش تصویر چیست؛ می‌توانیم به کاربردهای بینایی کامپیوتر زیر اشاره کنیم:

۱.سامانه‌های ترابری هوشمند: می‌توان در این سامانه‌ها برای تشخیص خودکار شماره‌ها و تشخیص علائم ترافیکی استفاده کرد.

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

۳.ره‌گیری اشیا در حال حرکت: این برنامه به شما امکان می‌دهد تا حرکت را اندازه‌گیری کنید و جهت حرکت را شبیه‌سازی نمایید.

۴.نظارت تصویری: سامانه‌های نظارتی محیطی برای نظارت در دریا و خشکی استفاده می‌شوند.

۵.کنترل محصول: این مجموعه از عملکردها باعث بهبود کیفیت و افزایش تولید در صنعتی می‌گردد.

تشخیص رنگ توسط OpenCV-Python

در بررسی مطلب اینکه پردازش تصویر جیست. بیایید گام عملی دیگری برداریم. گام‌هایی برای تکمیل پروژه به همراه سورس کد به شرح زیر است:

گام ۱: نصب کتابخانه‌های موردنیاز مانند CV2، Numpy، Pandas و aargparse

  • import cv2
  • import numpy as np
  • import pandas as pd
  • import argparse

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

گام ۳: با خواندن فایل CSV شروع می‌کنیم (colors.csv)

csv = pd.read_csv(‘colors.csv’, names=index, header=None)

گام ۴: فهم آنچه در فایل CSV است.  دستور .info() را بر روی داده‌ها به‌منظور بررسی انواع داده و مقادیر حاضر را اجرا کنید.

گام ۵: به‌منظور شناسایی مقادیر خالی ما از isna() به همراه sum() استفاده می‌کنیم.

گام ۶: فهم کد

در اینجا متغیر ‘ap’ شامل آرگومان‌هایی است که کمک می‌کند ما تصاویر را توسط فرمت  -i که به کاربر اجازه تغییر تصویر را می‌دهد استفاده می‌کنیم

ایجاد دریافت آرگومان مسیر تصویر از طریق خط فرمان

				
					ap = argparse.ArgumentParser()
ap.add_argument(‘-i’, ‘–image’, required=True, help=”Image Path”)
args = vars(ap.parse_args())
img_path = args[‘image’]

				
			

متغیر “Clicked” به حرکت اشاره‌گر موس و کلیک بر روی تصویر در قطعه کد پایتون برای پردازش تصویر اشاره دارد و مشخص می‌کند که کدام رنگ است.

به‌صورت پیش‌فرض این مقدار برای قرمز، سبز و آبی صفر است.

به‌منظور بررسی نوع داده ارائه‌شده در فایل csv  ما می‌توانیم ۵ خط اول را از طریق دستور .head مورد بررسی قرار دهیم.

متغیرهای “index” دارای پارامترها/ویژگی‌های تعریف‌شده در مجموعه‌ای از داده‌ها در سرآیند  CSV هستند.

				
					#Reading the image with opencav
img = cv2.imread(img_path)
 
#declaring global variables (are used later on)
clicked = False
r = g = b = xpos = ypos = 0
 
 
#Reading csv file with pandas and giving names to each column
index=["color","color_name","hex","R","G","B"]
 
#function to calculate minimum distance from all colors and get the most matching color
def getColorName(R,G,B):
    minimum = 10000
    for i in range(len(csv)):
        d = abs(R- int(csv.loc[i,"R"])) + abs(G- int(csv.loc[i,"G"]))+ abs(B- int(csv.loc[i,"B"]))
        if(d<=minimum):
            minimum = d
            cname = csv.loc[i,"color_name"]
    return cname
 
#function to get x,y coordinates of mouse double click
def draw_function(event, x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        global b,g,r,xpos,ypos, clicked
        clicked = True
        xpos = x
        ypos = y
        b,g,r = img[y,x]
        b = int(b)
        g = int(g)
        r = int(r)
       
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_function)
 
while(1):
 
    cv2.imshow("image",img)
    if (clicked):
   
        #cv2.rectangle(image, startpoint, endpoint, color, thickness)-1 fills entire rectangle 
        cv2.rectangle(img,(20,20), (750,60), (b,g,r), -1)
 
        #Creating text string to display( Color name and RGB values )
        text = getColorName(r,g,b) + ' R='+ str(r) +  ' G='+ str(g) +  ' B='+ str(b)
        
        #cv2.putText(img,text,start,font(0-7),fontScale,color,thickness,lineType )
        cv2.putText(img, text,(50,50),2,0.8,(255,255,255),2,cv2.LINE_AA)
 
        #For very light colours we will display text in black colour
        if(r+g+b>=600):
            cv2.putText(img, text,(50,50),2,0.8,(0,0,0),2,cv2.LINE_AA)
            
        clicked=False
 
    #Break the loop when user hits 'esc' key    
    if cv2.waitKey(20) & 0xFF ==27:
        break
    
cv2.destroyAllWindows()

				
			

تابع  getColorName(R,G,B)

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

حال ما مقادیر r و g و b را داریم. اکنون موقع استفاده از تابعی دیگر برای بازسازی نام رنگ برای بازیابی مقادیر RGB است. به‌منظور پیدا کردن نام رنگ، ما فاصله رنگ را به‌منظور پیدا کردن کمترین فاصله با رنگ‌های تعریف‌شده داریم.

تابع draw_function()

این تابع مقادیر پیکسل rgb را محاسبه می‌کند. پارامترهای فعال با نام رویداد، وضعیت پیوند موس (x,y) و … است. ما در این تابع بررسی می‌کنیم که آیا دابل کلیک رخ‌داده است و مجموع r,g,b و x,y موقعیت موس را مشخص می‌کنیم.

زمانی که رخ داد دو کلیک روی دهد. این تابع نام رنگ و مقادیر RGB را در پنجره به‌روز می‌کند.

ما با استفاده از  cv2.imshow() تصویر را در پنجره رسم می‌کنیم. زمانی که کاربر دو بار بر روی پنجره کلیک می‌کند ما یک مستطیل رسم می‌کنیم و نام رنگ را در پنجره موجود توسط توابع cv2.rectangle و  cv2.putText () ترسیم می‌کنیم.

ما در پروژه پایتون با سورس کد درباره رنگ RGB و نام رنگ پیکسل آموختیم. ما آموختیم تا رویدادهایی مانند دو بار کلیک بر پنجره را مدیریت کنیم و آموختیم که چگونه فایل‌های csv را توسط  pandas و اجرای وظایف بر روی داده‌ها را مدیریت کنیم. این امور برای بسیاری از نرم‌افزارهای ویرایش تصویر و کاربردهای ترسیمی مورداستفاده قرار می‌گیرند.

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

در این مقاله شما علاوه بر اینکه آموختید پردازش تصویر چیست، آموختید که چگونه عملیات‌های پایه‌ای و اصلی را انجام دهید. پردازش تصویر شیرین است؛ نظر شما چیست؟

اشتراک گذاری
0
محمد کیانی
محمد کیانی

مطالب مرتبط

face detection
۰۳ مرداد ۱۴۰۰

تشخیص چهره توسط پایتون با کمتر از ۲۵ خط کد


اطلاعات بیشتر
OpenCV features
۰۲ مرداد ۱۴۰۰

OpenCV چیست؟


اطلاعات بیشتر
what-is-digtal-image-processing
۱۵ اردیبهشت ۱۴۰۰

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


اطلاعات بیشتر

دیدگاهتان را بنویسید لغو پاسخ

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


The reCAPTCHA verification period has expired. Please reload the page.

گروه بارمان ویژن

افتخار داریم که فعالیتمان در زمینه بینایی ماشین، از سال ۱۳۹۴ آغاز شده است. در این مدت گام‌های موفقیت را آهسته و پیوسته برداشته‌ایم و به جایگاه حاضر رسیده‌ایم. در حال حاضر به عنوان تأمین‌کننده تجهیزات، طراح و مشاور در کنار شما هستیم و به مجریان بینایی ماشین مشاوره‌های لازم داده می‌شود؛ تولیدکنندگان گرامی ایران و ارمنستان نیز از سامانه‌های بینایی ماشین ما بهره‌برده‌اند.
پردازش تصویر توسط دوربین‌های صنعتی تخصص ماست.

نوشته‌های تازه

  • آموزش اتصال به دوربین صنعتی ZDS از طریق Python و OpenCV
  • واژگان و اصطلاحات یادگیری عمیق
  • دوربین Datalogic
  • Data Matrix (ECC200)
  • ماژول LabVIEW Vision Development

ارتباط با ما

آدرس:
اصفهان، خیابان جی شرقی، ارغوانیه، بلوار دانشگاه،  دانشگاه آزاد اسلامی واحد اصفهان، مرکز رشد واحدهای فناور، واحد ۵
اطلاعات تماس:
تلفن و واتساپ
۰۳۱۳۵۰۰۲۷۷۳
۰۹۰۲۴۰۰۴۴۸۰


تمام حق و حقوق محفوظ است.