معرفی ۳ ماژول پایتون برای پردازش تصاویر – قسمت دوم
موسسه پایا پروژه به عنوان متصدی انجام پروژه های پردازش تصویر با پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی متلب مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری شما داشته باشد.
در ادامه مباحث آموزش پردازش تصویر در پایتون و معرفی کتابخانه های آن، به مبحث معرفی کتابخانه Scikit-image میرسیم و در این پست قصد داریم تا به آموزش پردازش تصویر با کتابخانه Scikit-image در پایتون بپردازیم و نحوه نصب و کار کردن با این کتابخانه قدرتمند و توابع آن برای پردازش تصویر را به شما خواهیم آموخت.

۱_ آشنایی با کتابخانه Scikit-image و نصب ماژول
Scikit-image یک کتابخانه متن باز پردازش تصویر برای پایتون است که بر مبنای کتابخانه محاسبات علمی NumPy و SciPy توسعه یافته است.
الگوریتمهای متنوعی از مباحث قسمت بندی تصاویر، تبدیلات هندسی، کار در فضای رنگ، آنالیز تصاویر، فیلترینگ، ریخت شناسی (Morphology)، تشخیص ویژگیها و غیره همراه این کتابخانه در دسترس میباشد.
۲_ نصب کتابخانه Scikit-image
این کتابخانه در آدرس زیر معرفی شده است و برای نصب کتابخانه پردازش تصویر Scikit-image کافی است از کد زیر استفاده کنید:
pip install scikit-image
برای استفاده از کتابخانه فوق در کد خود نیز کافی است آن را ایمپورت کنید و از ماژول های مختلف آن بسته به نیاز خود استفاده کنید و همچنین این بسته را میتوان با استفاده از skimage در زبان پایتون import کرد.
بسیاری از توابع و الگوریتمهای پیادهسازی شده را میتوان در زیر واحدهای (Submodules) این بسته برنامهنویسی پیدا کرد و مورد استفاده قرار داد. در ادامه، برخی از فرایندهای پردازش تصویر با پایتون که توسط ابزار SciKit-Image قابل انجام است، نمایش داده خواهد شد.
۳_ معرفی توابع پردازش تصویر با ماژول Scikit-image
مثال های مختلفی از کارکردن با این کتابخانه در داکیومنت رسمی آن در زیر قرار داده شده است که هم برای آموزش و هم برای استفاده و کارکردن با تصاویر در پایتون می تواند مفید واقع شود:
https://scikit-image.org/docs/dev/auto_examples/
و مثال زیر اعمال فیلتر میانگین بر روی تصاویر مختلف می باشد و همچنین در کد زیر میخواهیم که فیلتر میانگین یا Mean Filter را بر روی تصویری اعمال کنیم :
from skimage import data
from skimage.morphology import disk
from skimage.filters import rank
image = data.coins()
selem = disk(20)
percentile_result = rank.mean_percentile(image, selem=selem, p0=.1, p1=.9)
bilateral_result = rank.mean_bilateral(image, selem=selem, s0=500, s1=500)
normal_result = rank.mean(image, selem=selem)
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 10),
sharex=True, sharey=True)
ax = axes.ravel()
titles = [‘Original’, ‘Percentile mean’, ‘Bilateral mean’, ‘Local mean’]
imgs = [image, percentile_result, bilateral_result, normal_result]
for n in range(0, len(imgs)):
ax[n].imshow(imgs[n], cmap=plt.cm.gray)
ax[n].set_title(titles[n])
ax[n].axis(‘off’)
() plt.tight_layout
() plt.show
کد فوق ابتدا تصویر Coin را لود می کند و سپس سه نوع فیلتر میانگین را بر روی آن اعمال کرده و در نهایت هر 4 تصویر را نمایش میدهد و همچنین خروجی کد فوق به صورت زیر می باشد:
۴_ عمل فیلتر گذاری بر روی تصاویر چیست و پیاده سازی آن با استفاده از ماژول Scikit-image
فیلتر گذاری روی تصاویر (Image Filtering): با استفاده از این ابزار، میتوان فیلترهای بالاگذر (High Pas) و پایین گذر (Low Pass) را جهت انجام پردازشهایی نظیر تشخیص لبه (Edge Detection) روی تصاویر اعمال کرد و کد زیر، نمونه و مثال های مختلفی رو در این زمینه پیاده سازی می کنه:
import matplotlib.pyplot as plt
%matplotlib inline
from skimage import data,filters
image = data.coins() # … or any other NumPy array!
edges = filters.sobel(image)
plt.imshow(edges, cmap=’gray’)
و در آخر خروجی کد فوق بصورت زیر می باشد:

۵ ـ تشخیص چهره در عکس
کد زیر نیز به راحتی و در زمان کوتاهی قادر به تشخیص چهره افراد در تصویر می باشد و با استفاده از این توابع، امکان پیاده سازی تشخیص چهره برای پایگاه های داده بزرگ نیز فراهم می باشد:
from skimage import data
from skimage.feature import Cascade
import matplotlib.pyplot as plt
from matplotlib import patches
# Load the trained file from the module root.
trained_file = data.lbp_frontal_face_cascade_filename()
# Initialize the detector cascade.
detector = Cascade(trained_file)
() = data.astronaut
detected = detector.detect_multi_scale(img=img,
scale_factor=1.2,
step_ratio=1,
min_size=(60, 60),
max_size=(123, 123))
plt.imshow(img)
()img_desc = plt.gca
plt.set_cmap(‘gray’)
for patch in detected:
img_desc.add_patch(
patches.Rectangle(
(patch[‘c’], patch[‘r’]),
patch[‘width’],
patch[‘height’],
fill=False,
color=’r’,
linewidth=2
)
)
() plt.show
و همچنین خروجی کد فوق نیز به صورت زیر می باشد:

۶_ تطبیق الگو در پایتون چیست و پیاده سازی آن با ماژول SciKit-Image
تطبیق الگو (Template Matching): در کاربردهای پردازش تصویر، برای تشخیص ظاهر شدن یک تصویر الگو در یک یا مجموعهای از تصاویر دیگر، از الگوریتمهای تطبیق الگو استفاده میشود و کد زیر نیز، یک نمونه از توابع تطبیق الگو در پایتون را پیاده سازی می کند:
import numpy as np
import matplotlib.pyplot as plt
from skimage import data
from skimage.feature import match_template
()image = data.coins
coin = image[170:220, 75:130]
result = match_template(image, coin)
ij = np.unravel_index(np.argmax(result), result.shape)
x, y = ij[::-1]
fig = plt.figure(figsize=(8, 3))
ax1 = plt.subplot(1, 3, 1)
ax2 = plt.subplot(1, 3, 2)
ax3 = plt.subplot(1, 3, 3, sharex=ax2, sharey=ax2)
ax1.imshow(coin, cmap=plt.cm.gray)
()ax1.set_axis_off
ax1.set_title(‘template’)
ax2.imshow(image, cmap=plt.cm.gray)
()ax2.set_axis_off
ax2.set_title(‘image’)
# highlight matched region
hcoin, wcoin = coin.shape
rect = plt.Rectangle((x, y), wcoin, hcoin, edgecolor=’r’, facecolor=’none’)
ax2.add_patch(rect)
ax3.imshow(result)
()ax3.set_axis_off
ax3.set_title(‘`match_template`\nresult’)
# highlight matched region
ax3.autoscale(False)
ax3.plot(x, y, ‘o’, markeredgecolor=’r’, markerfacecolor=’none’, markersize=10)
() plt.show
و همچنین نتیجه حاصل از کد فوق را در تصویر زیر میتوانید مشاهده کنید:
۷_ جمع بندی
همانطور که از مثال های فوق متوجه شدید ، کتابخانه Scikit-imageیک ابزار قدرتمند و بهینه شده برای پردازش تصویر در پایتون می باشد که به راحتی میتوانید در آن کارهایی مثل ریخته گری و یا تغییر تصاویر، و بهبود آنها را انجام دهید. در این قسمت درباره ماژول scikit-image به بحث و گفت و گو پرداختیم و با نمونه مثال های مختلف و جامع، از توابع این ماژول استفاده کردیم. در قسمت بعدی به معرفی و کار با ابزار NumPy می پردازیم که ماژول scikit-image نیز بر پایه این ابزار طراحی و نوشته شده است.


