راهنمایِی برای پردازش تصویر با استفاده از NumPy
بیشتر موارد استفاده از NumPy را در مسائلی مییابیم که در آنها باید عملیات ریاضی و منطقی را روی اندازههای مختلف آرایه انجام دهیم.
از آنجایی که می توان تصاویر را نیز از آرایه ها در نظر گرفت، می توانیم از NumPy برای انجام کارهای مختلف پردازش تصویر نیز از ابتدا استفاده کنیم.
پیشنهاد ویژه:
« اولین و کاملترین دوره آموزشی نرم افزار اودئون ODEON برای طراحی آکوستیک »
ثبت نام دوره آموزشی نرم افزار اودئون ODEON
در این مقاله با وظایف پردازش تصویر که فقط با استفاده از NumPy قابل انجام هستند آشنا می شویم. این برای مبتدیان مفید خواهد بود تا پردازش تصویر را از همان ابتدا درک کنند. عملیات عمده ای که باید با استفاده از NumPy انجام شود در زیر ذکر شده است که در این مقاله به آنها خواهیم پرداخت.
- بارگذاری تصویر
2. برش تصویر
3. تفکیک رنگ ها
4. دگرگونی
5. تبدیل مقیاس خاکستری
6. تقسیم بندی تصویر
بارگذاری تصویر
بیایید با وارد کردن کتابخانه ها و بارگذاری یک تصویر تصادفی شروع کنیم.
import numpy as np
import matplotlib.pylab as plt
matplotlib inline%
image = plt.imread(“/content/drive/MyDrive/Yugesh/image processing using numpy/images.jfif”)
print(image)
:Output
در اینجا می توانیم شکل خام تصویر را ببینیم. از آنجایی که از نظر ریاضی، تصاویر از مقادیر پیکسل در خروجی بالا تشکیل شده اند، می بینیم که اعدادی داریم که رنگ های تصویر را مشخص می کنند و تصویر اساساً یک آرایه یا آرایه NumPy است. همچنین می توانیم با استفاده از کتابخانه matplotlib تصویر را رسم کنیم.
imgplot = plt.imshow(image)
:Output
برش تصویر
پس از بارگذاری تصویر آماده انجام اقدامات روی تصویر هستیم. همانطور که در بسیار ابتدایی میتوانیم عملیات برش اولیه را روی تصویر خود انجام دهیم. برای NumPy، عملیات برش را می توان با برش دادن آرایه انجام داد.
crop_img = image[20:199,:200,:]
imgplot = plt.imshow(crop_img)
:Output
در اینجا می بینیم که تصویر خود را برش داده ایم. اکنون می توانیم به مرحله بعدی پردازش تصویر خود برویم.
تفکیک رنگ
از آنجایی که می دانیم هر تصویر از مقادیر پیکسل ساخته شده است و این مقادیر پیکسل نشان دهنده سه عدد صحیح است که به عنوان مقدار RGB رنگ آن شناخته می شود. برای جدا کردن تصویر در این رنگها، باید برش صحیح آرایه تصویر را بیرون بیاوریم.
fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(20,8))
:for c, ax in zip(range(3), axs)
rgb_img = np.zeros(image.shape, dtype=”uint8″)
rgb_img[:,:,c] = image[:,:,c]
ax.imshow(rgb_img)
()ax.set_axis_off
:Output
در اینجا در خروجی، میتوانیم ببینیم که RGB تصویر را از هم جدا کردهایم و مقادیر را در محدوده 0 تا 1 نگاشت کرده و به نوع uint8 فرستادیم. بیایید به سمت مرحله بعدی پردازش تصویر حرکت کنیم.
پیشنهاد ویژه:
دوره آموزش ماژول آکوستیک ساختمانی نرم افزار کامسول
ثبت نام دوره آموزشی نرم افزار کامسول
تحولات
در این مرحله تغییر رنگ را انجام می دهیم. برای این منظور می توانیم پیکسل تصویر را به عنوان نقطه ای در فضا در نظر بگیریم. استفاده از این روش با پیکسل های تصویری به ما امکان می دهد تا یک تبدیل به نقطه رنگ انجام دهیم.
چرخاندن نقطه رنگ می تواند نمونه ای از عبارت بالا باشد. در اینجا ما تابع علامت گذاری انیشتین Numpy را اعمال می کنیم که روشی برای اعمال یک ماتریس چرخشی، از نظر پیکسل، بر روی تصویر است.
:def do_normalise(image)
return -np.log(1/((1 + image)/257) – 1)
def undo_normalise(image)
return (1 + 1/(np.exp(-image) + 1) * 257).astype(“uint8”)
:def rotation_matrix(theta)
]_return np.c
,[1,0,0]
,[0,np.cos(theta),-np.sin(theta)]
[0,np.sin(theta),np.cos(theta)]
[
img_norm = do_normalise(image)
img_rot = np.einsum(“ijk,lk->ijl”, img_norm, rotation_matrix(np.pi))
img = undo_normalise(img_rot)
imgplot = plt.imshow(img)
:Output
در اینجا در خروجی، میتوانیم ببینیم که سیگموئید اعمال شده در فضای رنگی کار کرده است و چرخش رنگ پیکسلها را بهطور پیوسته اعمال میکنیم. حال در مرحله بعدی به این خواهیم پرداخت که چگونه می توانیم یک تصویر را به یک تصویر در مقیاس خاکستری تبدیل کنیم.
تبدیل مقیاس خاکستری
ما همچنین می توانیم از NumPy برای تبدیل تصویر به یک تصویر در مقیاس خاکستری استفاده کنیم. با در نظر گرفتن میانگین وزنی مقدار RGB تصویر می توانیم این کار را انجام دهیم.
rgb_weights = [0.2989, 0.5870, 0.1140]
grayscale_image = np.dot(image[…,:3], rgb_weights)
imgplot = plt.imshow(grayscale_image)
:Output
در اینجا تصویر خروجی فرآیند تبدیل مقیاس خاکستری ما است. بیایید به مرحله بعدی پردازش تصویر خود برویم.
تقسیم بندی تصویر
این یکی از پرکاربردترین مراحل پردازش تصویر است که در آن مناطق مختلف تصاویر را تقسیم بندی می کنیم. راه های مختلفی برای انجام این کار وجود دارد مانند پیش زمینه و پس زمینه.
به عنوان مثال، در این مقاله قصد داریم ببینیم چگونه می توانیم با تبدیل تصویر به مقیاس خاکستری و یافتن آستانه، قطعه بندی را انجام دهیم. پیکسل هایی در تصویر که بالاتر از آستانه هستند در یک منطقه و بقیه در ناحیه دیگری هستند.
:def simple_threshold(image, threshold=128)
return ((image > threshold) * 255).astype(“uint8”)
thresholds = [100,120,128,138,150]
;fig, axs = plt.subplots(nrows=1, ncols=len(thresholds), figsize=(20,5))
gray_im = to_grayscale(image)
:for t, ax in zip(thresholds, axs)
ax.imshow(simple_threshold(gray_im, t), cmap=’Greys’)
ax.set_title(“Threshold: {}”.format(t), fontsize=20)
;()ax.set_axis_off
:Output
در اینجا در خروجی بالا، می بینیم که تصویر را با استفاده از مقادیر آستانه متفاوت به دو منطقه تقسیم کرده ایم.
سخنان پایانی
در این مقاله، وظایف مختلف پردازش تصویر را که با استفاده از کتابخانه NumPy انجام داده ایم، مورد بحث قرار داده ایم. همچنین از کتابخانه matplotlib برای تجسم تصاویر پس از پردازش استفاده کرده ایم. با نگاهی به نکات بالا می توان گفت که با استفاده از منطقی دیگر می توانیم کارهای دیگری را نیز انجام دهیم.