مقدمه
پردازش تصویر (Image Processing) شاخهای از علم رایانه است که به بررسی و ویرایش تصویرها با هدف استخراج اطلاعات، بهبود کیفیت، طبقهبندی، شناسایی اشیا و بسیاری از کاربردهای دیگر میپردازد. پایتون با کتابخانههای قدرتمندی مانند OpenCV، PIL، Scikit-image و… به یکی از محبوبترین زبانهای برنامهنویسی برای پردازش تصویر تبدیل شده است.
در این مقاله، مفاهیم بنیادی پردازش تصویر، معرفی کتابخانههای معروف پایتون، کاربردهای عملی و مثالهایی از نحوه استفاده از این ابزارها را بررسی خواهیم کرد.
پردازش تصویر چیست؟
پردازش تصویر به تکنیکهایی اطلاق میشود که با هدف بهبود، تمیز کردن تصویر یا استخراج ویژگی از آن انجام میگیرد. این تکنیکها در حوزههایی مانند پزشکی (تحلیل تصاویر MRI)، امنیت (تشخیص چهره)، صنعت (کنترل کیفیت محصولات)، هنر دیجیتال و… کاربرد دارند.
پردازش دیجیتال تصاویر به معنی دستکاری دادههای الکترونیکی تصویر در رایانه است. این تصاویر اغلب به صورت آرایههایی از پیکسل در حافظه ذخیره میشوند. هر پیکسل مقداری دارد که میتواند شدت نور (در تصاویر سیاه و سفید) یا رنگ (در تصاویر رنگی) را نشان دهد.
کتابخانههای معروف پردازش تصویر در پایتون
پایتون با دارا بودن کتابخانههای متنوع، کار پردازش تصاویر را آسان کرده است. برخی از مهمترین این کتابخانهها:
- OpenCV: قویترین و پرکاربردترین کتابخانه پردازش تصویر که توابع متعدد برای ویرایش، آنالیز و تبدیل تصاویر تاکید دارد.
- Pillow (PIL): ابزار سادهای برای بازکردن، ذخیره، ویرایش و تبدیل تصاویر که برای کاربردهای روزمره استفاده میشود.
- Scikit-image: مجموعهای از توابع علمی و ماشین لرنینگ محور که در کنار کتابخانههایی مثل NumPy و SciPy استفاده میشود.
- Imageio: برای خواندن و نوشتن انواع تصاویر و ویدیوها.
- Matplotlib: هر چند هدف اصلی نمایش دادهها (Visualization) است اما میتواند برای نمایش و حتی تا حدی پردازش تصاویر به کار رود.
مراحل اصلی پردازش تصویر
یک جریان کاری سادهی پردازش تصویر معمولا شامل مراحل زیر است:
- خواندن تصویر
- پیشپردازش (مانند فیلتر کردن، تغییر اندازه یا کاهش نویز)
- تبدیل و استخراج ویژگیها (مانند لبهها، گوشهها، بافتها)
- تحلیل و شناسایی (مانند طبقهبندی، شناسایی اشیا، خوشهبندی)
- نمایش یا ذخیره نتایج
نمونه کد: خواندن و نمایش تصویر با OpenCV و Pillow
خواندن و نمایش تصویر با OpenCV
import cv2 image = cv2.imread('image.jpg') cv2.imshow('My Image', image) cv2.waitKey(0) cv2.destroyAllWindows()
خواندن و نمایش تصویر با Pillow
from PIL import Image img = Image.open('image.jpg') img.show()
توجه کنید که OpenCV تصاویر را در فرمت BGR و Pillow در فرمت RGB مدیریت میکند.
پیشپردازش تصویر
برای رسیدن به نتایج بهتر، معمولا تصاویر خام باید اصلاح شوند. برخی روشهای رایج:
- تغییر اندازه (Resizing): تغییر ابعاد تصویر برای کاهش حجم داده یا افزایش سرعت پردازش.
- تبدیل به خاکستری (Grayscale): بسیاری از الگوریتمها (مانند تشخیص لبه) فقط بر شدت نور کار میکنند.
- نرمالسازی: مقیاسبندی شدت پیکسلها برای یکنواختی دادهها.
- کاهش نویز: استفاده از فیلترهایی چون Gaussian یا Median برای حذف نویز.
نمونه کد تغییر اندازه و تبدیل رنگ در OpenCV:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) resized = cv2.resize(gray, (128,128)) cv2.imwrite('gray_resized.jpg', resized)
استخراج ویژگیها
اصلیترین مرحله پردازش تصویر، استخراج ویژگیهای مهم و برجسته است:
- تشخیص لبه (Edge Detection): الگوریتمهایی مانند Sobel و Canny لبههای تصویر را استخراج میکنند.
- بالا بردن کانتراست: با استفاده از تکنیکهایی همانند Histogram Equalization.
- شناسایی اشیا و نواحی: با استفاده از الگوریتمهایی مانند Thresholding، کانتورها و Segmentaion.
مثالی برای شناسایی لبهها با Canny در OpenCV:
edges = cv2.Canny(gray, 100, 200) cv2.imwrite('edges.jpg', edges)
کاربردهای عملی پردازش تصویر
- تشخیص چهره: یکی از پرکاربردترین موارد در امنیت، رسانهها و شبکههای اجتماعی.
- OCR (تبدیل تصویر به متن): خواندن نوشتههای داخل تصاویر با کتابخانههایی مثل pytesseract.
- تحلیل پزشکی: مثل بررسی سلولهای سرطانی، تصاویر MRI و …
- کنترل ربات و خودروهای خودران: برای درک محیط و موانع توسط ماشینها.
- هنر دیجیتال و فیلترگذاری: ساخت فیلترهای تصویری و تغییر جلوههای بصری.
شناسایی چهره با OpenCV
OpenCV با دارا بودن مدلهایی مانند Haar Cascade تشخیص چهره را آسان میکند:
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') img = cv2.imread('people.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2) cv2.imwrite('faces_detected.jpg', img)
پردازش تصویر با یادگیری ماشین
شبکههای عصبی و الگوریتمهای یادگیری ماشین در سالهای اخیر تحولات چشمگیری در پردازش تصویر ایجاد کردهاند. با استفاده از کتابخانههایی چون TensorFlow و PyTorch میتوان مدلهایی برای طبقهبندی تصاویر، شناسایی اشیا و حتی تولید تصاویر جدید آموزش داد.
نمونه مدل دستهبندی تصویر:
from tensorflow.keras.applications import MobileNetV2 from tensorflow.keras.preprocessing import image from tensorflow.keras.applications.mobilenet_v2 import preprocess_input, decode_predictions import numpy as np img = image.load_img('test.jpg', target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) model = MobileNetV2(weights='imagenet') preds = model.predict(x) print('Predicted:', decode_predictions(preds, top=3)[0])
جمعبندی
پردازش تصویر با پایتون به سبب سادگی کدنویسی، منابع آموزشی فراوان و کتابخانههای سطح بالا به سرعت در پروژههای صنعتی و دانشگاهی جای خود را باز کرده است. چه قصد شما پیادهسازی الگوریتمهای ساده فیلترگذاری باشد یا کاربردهای پیشرفتهای مانند یادگیری ماشین و پردازش پزشکی، پایتون ابزارها و امکانات لازم را فراهم میکند.
در پایان، پیشنهاد میکنیم با تمرین پروژههای کوچک و مطالعه مستندات هر کتابخانه، مهارت خود را در این حوزه افزایش دهید.