هر تصویر داستانی خاص برای خود دارد که پردازش و گرفتن اطلاعات مفید آن میتواند حتی جان افراد را نجات دهد! با پردازش درست تصویری پزشکی یا تشخیص چهره یک تروریست، میتوان جان میلیونها نفر را در سراسر جهان نجات داد!
به گفته IDC حجم دیتا موجود در دنیا تا سال ۲۰۲۵ به ۱۷۵ زتابایت (۱۰ بهتوان ۲۷ بایت!) افزایش پیدا میکند و قسمت عظیمی از آن را تصاویر تشکیل میدهند. همین امر نشاندهنده اهمیت پردازش تصویر و نیاز با ابزارهای قویی در این حوزه است. البته این حجم بالا از تصاویر نیاز به روشها و ابزارها قدرتمندی دارد.
پردازش تصویر با پایتون یکی از بهترین راههایی است که میتوان از آن برای سروکله زدن با تعداد زیادی از این عکسها استفاده کرد. در این مقاله با مفهوم پردازش تصویر آشنا میشویم و سپس بهترین کتابخانههایش را معرفی میکنیم.
تصویر چیست؟
قبل از اینکه سراغ پردازش تصویر با پایتون برویم و وارد این دنیا شویم، نیاز است که تعریفی از خود تصویر داشته باشیم:
یک تصویر از تعدادی پیکسل تشکیل شده که هر کدام از آنها حاوی اطلاعاتی مثل سایه، میزان تیرگی و روشنی و رنگ خاصی در مورد آن عکس است.
معمولا پیکسل به یکی از چهار مدل زیر، اطلاعات را در مورد عکس در خود ذخیره میکند:
- مقیاس خاکستری Grayscale: میزان پیکسل در این مدل با عددی صحیح بین ۰ تا ۲۵۵ نشان داده میشود. ۲۵۵ کاملا سفید و ۰ کاملا سیاه است.
- باینری: در این مدل پیکسلها فقط دو مقدار دارند؛ ۰ (نماینده سیاه) و ۱ (نماینده سفید). چنین تصاویری معمولاً برای برجسته کردن بخش متمایزی از یک تصویر رنگی استفاده میشوند.
- RGB: در این مدل هر پیکسل از ۳ عدد صحیح بین ۰ تا ۲۵۵ تشکیل شده است.که در واقع هر عدد شدت رنگ قرمز، سبز و آبی را نشان میدهد.
- RGBA: این حالت، مدل پیشرفته RGB است که یک فیلد آلفا به آن اضافه شده و نشاندهنده میزان شفافیت تصویر است.
تعداد پیکسلهای یک عکس را هم میتوانید از ارتفاع و عرض آن بفهمید، مثلا، اگر ابعاد تصویری، یعنی عرض و ارتفاعش ۲۰۰ × ۳۰۰ باشد، تعداد کل پیکسلهای موجود در تصویر ۶۰۰۰۰ است.
کامپیوترها تصاویر دیجیتال را به عنوان آرایههای دو یا سه بعدی از اعداد درک میکنند. یک تصویر دیجیتال را میتوان مثل صفحه شطرنج تصور کرد. هر مربع در صفحه شطرنج یک پیکسل است.
پس در واقع تصویر دیجیتال، آرایهای پیکسلها (که به یکی از چهار مدل بالا مقداردهی شده) است که در ستون و ردیفهای مختلف، مرتب شدهاند.
چیزی که ما میبینیم در مقابل چیزی که کامپیوتر میبیند:

پردازش تصویر چیست؟
خب حالا که با مفهوم تصویر دیجیتال آشنا شدیم، وقت آن است که بفهمیم پردازش تصویر با پایتون چیست:
پردازش تصویر، به مجموعه ای از روشها و تکنیکها گفته میشود که برای دستکاری و تحلیل تصاویر دیجیتال انجام میشود.
همانطور که از اسمش پیداست، پردازش تصویر به معنای انجام عملیات روی تصویر است و از تکنیکهای مختلفی تا رسیدن به هدف نهایی (مثل وقتی که بخواهیم تصویر را به فرمت دیجیتال تبدیل کنیم، روی آن فیلترهای مختلفی اعمال کنیم، ویژگیهای خاصی را از آن استخراج کنیم و یا حتی تصاویر جدیدی را با استفاده از آن بسازیم) استفاده میکند.
در پردازش تصویر، با عکس بهصورت سیگنال دو بعدی رفتار شده و عملیات و متندهای سیگنال روی آن اعمال میشود.
مراحل پردازش تصویر
پردازش تصویر با پایتون یا هر زبان دیگری بهصورت کلی در مراحل زیر انجام میشود:
- ثبت تصویر: داستان با گرفتن عکس توسط دوربین آغاز میشود. سپس اگر خروجی دوربین دیجیتال نباشد، با مبدل آنالوگ به دیجیتال، به فرمت قابل پردازش در کامپیوتر تبدیل میشود.
- تقویت تصویر: در این مرحله، عکس خام دستکاری میشود تا برای هدف نهایی آماده شود. تکنیکهای این مرحله مثل تنظیم کنتراست و روشنایی، به دنبال برجسته کردن جزئیات پنهان و مهم هستند.
- ترمیم تصویر: این مرحله به بهبود ظاهری تصویر اختصاص دارد. برخلاف بخش قبلی، عیوب تصویر قابل مدلسازی ریاضی بهصورت عینی برطرف میشوند؛ مثلاً حذف نویز یا تاری از عکس.
- پردازش تصویر رنگی: هدف این مرحله پردازش تصاویر رنگی (تصاویر ۱۶ بیتی RGB یا RGBA) است و کارهایی مثل اصلاح یا مدلسازی رنگ را انجام میدهد.
- موجکها و پردازش چند-رزولوشنی: موجکها ابزارهایی هستند که به نمایش تصویر در سطوح مختلف جزئیات کمک میکنند. تصویر به قطعههای کوچکتری تقسیم میشود تا فشردهتر شود و نمایش جزئیات را ممکن سازد.
- فشردهسازی تصویر: برای جابجایی تصاویر بین دستگاهها یا بهخاطر محدودیتهای حافظه، باید آنها را فشرده کرد. این موضوع در نمایش تصاویر در اینترنت نیز مهم است. بهعنوان مثال، در گوگل یک تصویر کوچک، نسخه بسیار فشرده شده ورژن اصلی است و تنها زمانی که روی آنها کلیک میکنید با وضوح اصلی نشان داده میشوند. این فرآیند باعث صرفه جویی در پهنای باند روی سرورها میشود.
- پردازش مورفولوژیکی: برای پردازشهای بعدی، لازم است اجزای مهم تصویر استخراج شوند. پردازش مورفولوژیکی (که در واقع عملیات ریاضی است) ابزارهایی برای این کار در اختیار ما قرار میدهد. به عنوان مثال، عملیات فرسایش و اتساع بهترتیب برای واضحکردن و محوکردن لبههای اجسام در یک تصویر استفاده میشود.
- قطعهبندی تصویر: در این مرحله، تصویر به بخشهای کلیدی تقسیم میشود تا سادهتر شده و راحتتر قابل تحلیل باشد. این کار باعث میشود کامپیوتر روی بخشهای مهمتر تمرکز و عملکرد سیستمهای خودکار را بهتر کند.
- نمایش و توصیف: قطعهبندی معمولاً با این مرحله دنبال میشود. نمایش به این برمیگردد که آیا ناحیهی قطعهبندیشده را باید خط مرزی در نظر گرفت یا یک ناحیهی کامل. توصیف هم به استخراج ویژگیهایی مربوط میشود که اطلاعات کوچکی ارائه میدهند یا در تمایز بین دو نوع شیء کاربرد دارند.
- تشخیص و شناسایی اشیاء: بعد از قطعهبندی و تکمیل مراحل نمایش و توصیف، سیستم خودکار باید روی شیء برچسب بزند و به کاربر بگوید چه چیزی را تشخیص داده است؛ مثلاً “ماشین” یا “شخص”.
- پایگاه دانش: هر چیزی که به حل مشکل خاص ما کمک کند، میتواند در این پایگاه دانش جا داده شود.
چرا باید از پایتون برای پردازش تصویر استفاده کنیم؟
هزاران پروژه پردازش تصویر با پایتون در حوزههای مختلف وجود دارد؛ از پزشکی گرفته تا امنیت.
اما چرا افراد ترجیح میدهند از این زبان برای پردازش تصویر استفاده کنند؟
- یادگیری آسان: یکی از دلایل مهم پردازش تصویر با پایتون راحتی این زبان است. پایتون را به راحتی میتوانید یاد بگیرید و در هر حوزهای استفاده کنید. اگر میخواهید بیشتر با این زبان آشنا شوید، مقاله معرفی بهترین کتاب پایتون و راهنمای انتخاب برترین منابع آموزشی را مطالعه کنید.
- کتابخانههای قدرتمند پایتون برای پردازش تصویر: پایتون کتابخانههای قدرتمندی مانند OpenCV، NumPy، و Matplotlib دارد که بهطور خاص برای پردازش تصویر طراحی شدهاند. تعداد زیادی تابع و ابزار در این کتابخانهها وجود دارد که کار را برای افراد راحتتر میکند.
- سرعت بالا پایتون: پایتون زبانی سریع است که میتواند برای پردازش تصاویر بهصورت real-time استفاده شود. همین موضوع این زبان را گزینهای مناسب برای رباتیک و بینایی ماشین تبدیل میکند.
- پایتون رایگان و انعطافپذیر است: این زبان انعطافپذیر است و میتوان از آن برای طیف وسیعی از وظایف پردازش تصویر استفاده کرد. همچنین به دلیل رایگان بودن، گزینه مناسبی جهت انجام تحقیقات دانشگاهی و علمی است.
بعد از اینکه فهمیدیم چرا پایتون برای پردازش تصویر گزینه خوبی است، قصد داریم در ادامه آموزش پردازش تصویر با پایتون رایگان را باهم دنبال کنیم.
آموزش پردازش تصویر با پایتون
پردازش تصویر با پایتون از طریق کتابخانههای قدرتمند این زبان صورت میگیرد که دانستن و آشنایی با آنها ضروری است.
آشنایی با این کتابخانهها به شما کمک میکند تا بتوانید هرچه راحتتر یک تصویر را پردازش کنید و بدانید برای رسیدن به هدف خاصی از کدام یک استفاده کنید. در ادامه شما را با چند کتابخانه مهم آشنا میکنیم و به آموزش پردازش تصویر با پایتون با چند کد ابتدایی در هر کتابخانه میپردازیم.
OpenCV
کتابخانه OpenCV یکی از مهمترین و پرکاربردترین کتابخانهها برای پردازش تصویر با پایتون است. این کتابخانه توسط شرکت قدرتمند Intel در سال ۲۰۰۰ توسعه پیدا کرد و بیشتر در کارهای بینایی کامپیوتری مثل تشخیص اشیا، تشخیص چهره، تقسیم بندی تصویر و… استفاده میشود. یکی از دلایل محبوبیت این کتابخانه بهدلیل سرعت پالایش است.

برای اینکه بیشتر با این کتابخانه آشنا شویم، در ادامه با کمک آن میخواهیم یک تصویر را خاکستری کنیم:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread(‘goku.jpeg’)
gray_image = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
fig, ax = plt.subplots(1, ۲, figsize=(16, ۸))
fig.tight_layout()
ax.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
ax.set_title(“Original”)
ax.imshow(cv.cvtColor(gray_image, cv.COLOR_BGR2RGB))
ax.set_title(“Grayscale”)
plt.show()
Scikit-Image
این کتابخانه یکی از مهمترین ابزارهای پردازش تصویر است که برای کارهای مختلفی از جمله تقسیم بندی، تحولات هندسی، دستکاری فضای رنگی، تحلیل و بررسی، فیلترکردن، مرفولوژی و… مناسب است. این کتابخانه با استفاده از الگوریتمهای کارآمد و با بهرهگیری از بخشهایی به زبان Cython (زبانی نزدیک به پایتون که عملکرد بالایی در حد زبان C ارائه میدهد) برای دستیابی به عملکرد بالا، طیف گستردهای از قابلیتها را برای دستکاری و تحلیل تصاویر در اختیار شما قرار میدهد.

نمونه استفاده از این کتابخانه برای مدلهای کانتور فعال (Active Contour Models) که بخشهای مختلف یک تصویر را از هم جدا میکند:
import numpy as np
import matplotlib.pyplot as plt
from skimage.color import rgb2gray
from skimage import data
from skimage.filters import gaussian
from skimage.segmentation import active_contour
img = data.astronaut()
# Data for circular boundary
s = np.linspace(0, ۲*np.pi, ۴۰۰)
x = ۲۲۰ + ۱۰۰*np.cos(s)
y = ۱۰۰ + ۱۰۰*np.sin(s)
init = np.array().T
# formation of the active contour
cntr = active_contour(gaussian(img, ۳),init, alpha=0.015, beta=10, gamma=0.001)
fig, ax = plt.subplots(1, ۲, figsize=(7, ۷))
ax.imshow(img, cmap=plt.cm.gray)
ax.set_title(“Original Image”)
ax.imshow(img, cmap=plt.cm.gray)
# circular boundary
ax.plot(init[:, ۰], init[:, ۱], ‘–r’, lw=3)
ax.plot(cntr[:, ۰], cntr[:, ۱], ‘-b’, lw=3)
ax.set_title(“Active Contour Image”)
SciPy
اگرچه SciPy بیشتر برای محاسبات ریاضی و علمی شناخته شده است، اما با استفاده از زیرمجموعه scipy.ndimage، میتواند پردازش تصویر چندبعدی را هم انجام دهد. این زیرمجموعه توابعی را برای کار با آرایههای چندبعدی NumPy ارائه میدهد که تصاویر هم آرایههای چندبعدی هستند.

خواندن و تقسیمبندی تصاویر، کانولوشن، تشخیص چهره و استخراج ویژگی از جمله عملیاتی هستند که میتوانید با این کتابخانه انجام دهید.
بلور کردن یک تصویر با استفاده از SciPy :
from scipy import misc,ndimage
from matplotlib import pyplot as plt
face = misc.face()
blurred_face = ndimage.gaussian_filter(face, sigma=3)
fig, ax = plt.subplots(1, ۲, figsize=(16, ۸))
ax.imshow(face)
ax.set_title(“Original Image”)
ax.set_xticks([])
ax.set_yticks([])
ax.imshow(blurred_face)
ax.set_title(“Blurred Image”)
ax.set_xticks([])
ax.set_yticks([])
Pillow/PIL
کتابخانهی (PIL (Python Imaging Library یک ابزار متن باز و رایگان برای انجام کارهای مختلف روی تصاویر است. با PIL میتوانید کارهای متنوعی مثل خواندن تصویر، تغییر اندازه، ذخیرهسازی در فرمتهای مختلف، چرخش و آینهسازی و اعمال فیلترهای ترسیم روی تصویر انجام دهید.
ورودی

خروجی

روش بالا بردن کیفیت تصویر با استفاده از این کتابخانه:
from PIL import Image, ImageFilter
#Read image
im = Image.open(‘cat_inpainted.png’)
#Display image
im.show()
from PIL import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.8).show(“30% more contrast”)
NumPy
یک تصویر اساسا آرایهای از پیکسلهاست. بنابراین، کتابخانه NumPy که عملیات زیادی روی آرایهها انجام میدهد به راحتی میتواند کارهایی مانند برش تصویر، ماسک کردن و دستکاری مقادیر پیکسل را ممکن سازد.

برای مثال برای استخراج کانال های قرمز/سبز/آبی از تصویر زیر از این کد استفاده میکنیم:
from PIL import Image
import numpy as np
im = np.array(Image.open(‘goku.png’))
im_R = im.copy()
im_R[:, :, (1, ۲)] = ۰
im_G = im.copy()
im_G[:, :, (0, ۲)] = ۰
im_B = im.copy()
im_B[:, :, (0, ۱)] = ۰
im_RGB = np.concatenate((im_R, im_G, im_B), axis=1)
pil_img = Image.fromarray(im_RGB)
pil_img.save(‘goku.jpg’)
Mahotas
این کتابخانه یکی دیگر از کتابخانههای پردازش تصویر و بینایی کامپیوتری است که بهطور خاص برای انفورماتیک تصویر زیستی طراحی شده است. Mahotas از آرایههای Numpy برای خواندن و نوشتن و از زبان ++C برای پیادهسازی استفاده میکند.

با کمک کد زیر میتوان کسی را بین جمعیت پیدا کرد:
from pylab import imshow, show
import mahotas
import mahotas.demos
import numpy as np
wally = mahotas.demos.load(‘Wally’)
wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))
w = wfloat.mean(2)
pattern = np.ones((24,16), float)
for i in range(2):
pattern = -۱
v = mahotas.convolve(r-w, pattern)
mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48,24)))
np.subtract(wally, .۸*wally * ~mask[:,:,None], out=wally, casting=’unsafe’)
imshow(wally)
show()
SimpleITK
ITK که مخفف Insight Segmentation and Registration Toolkit است، یک پلتفرم منبع باز قدرتمند و پرکاربرد برای تشخیص و همترازی تصاویر میباشد. این ابزار برای دو هدف اصلی به کار میرود:
- تشخیص تصویر: این فرآیند به معنای تقسیمبندی یک تصویر به بخشهای معنادار و جداگانه است. به عنوان مثال، در تصویر پزشکی، میتوان با تشخیص تصویر، تومور را از بافتهای سالم جدا کرد.
- همترازی تصاویر: این فرآیند به معنای منطبق کردن دو یا چند تصویر بر یکدیگر است، به طوری که اجزای مشابه در تصاویر با هم تراز شوند. این کار در بسیاری از حوزهها، مانند تشخیص تغییرات در تصاویر ماهوارهای یا مقایسه تصاویر پزشکی در زمانهای مختلف، کاربرد دارد.
Pgmagick
این ابزار یکی دیگر از ابزارهای قدرتمند پایتون است که برای اهدافی مثل تغییر اندازه، چرخش، شارپ کردن، تصاویر گرادیان و نوشتن متن روی عکس استفاده میشود.
بلور کردن عکس با استفاده از این کتابخانه:
from pgmagick.api import Image
img = Image(‘leena.jpeg’)
# blur image
img.blur(10, ۵)
بهترین راه یادگیری پردازش تصویر با پایتون
یادگیری پردازش تصویر از راههای مختلفی امکان پذیر است؛ از کتاب پردازش تصویر با پایتون گرفته تا سایتهای آموزشی مختلف. اما بهترین روش چیست؟
بهترین راه یادگیری این علم میتواند با توجه به روش یادگیری هر فرد متفاوت باشد، اما برای اکثر افراد دوره پردازش تصویر با پایتون یک انتخاب مناسب است. ولی هر دورهای میتواند پاسخگو نیازهای ما باشد؟ قطعا جواب «نه» است! دورهای که انتخاب میکنید باید مربی داشته باشد که در این حوزه تجربه داشته و مباحث را بهصورت جامع تدریس کند، پاسخگو سوالاتتان باشد و مدرک معتبری به شما ارائه دهد.
اگر دنبال چنین دورهای میگردید، پیشنهاد ما به شما دوره پردازش تصویر و ویدیو آکادمی همراه است. با این آموزش، شما میتوانید به راحتی، دادههای بصری را به شکلی خلاقانه ویرایش کنید.
در این دوره پس از آشنایی با مفاهیم اولیه و پایه، فیلترهای مورد نیاز برای کارهای مختلف پردازشی را یاد گرفته و سپس عناوین دیگری مثل ادغام چند تصویر، نمایش تصویر به کمک هرمهای پردازش و فشردهسازی مدیا آشنایی کامل پیدا میکنید.