هسته (پردازش تصویر)

در پردازش تصویر, یک هسته , ماتریس کانولوشن , یا پوشش یک ماتریس کوچک است که روی تصویر اعمال میشود.
(تصویر ، یک ماتریس است که در هریک از درایه‌های آن مقادیر رنگ مربوط به آن درایه بسته به سیستم رنگی استفاده شده ، قرارگرفته‌اند)
از هسته برای ایجاد فیلتر‌های مختلف روی عکس استفاده میکنند ، از دیگر کاربرد‌های آن در یادگیری ماشین است.
هر هسته برای یک کار خاص مفید است مثل مات کردن، تیز کردن، برجسته سازی، تشخیص لبه، و کارهای دیگر.
این تغییرات روی تصویر با عبور دادن ماتریس هسته (که از ماتریس تصویر اندازه‌ی کوچکتری دارد) از تصویر یا میانگین گیری کانولوشن بین هسته و تصویر صورت می‌گیرد.
جزئیات
بسته به مقادیر عنصر، یک هسته می‌تواند محدوده گسترده‌ای از تاثیرات را داشته باشد.
عملیات
هسته
تصویر حاصل
همانی
\begin{bmatrix
0 - 0 - 0 \\
0 - 1 - 0 \\
0 - 0 - 0 \\
\end{bmatrix
پرونده:Vd-Orig.png
تشخیص لبه
\begin{bmatrix
1 - 0 - -1 \\
0 - 0 - 0 \\
-1 - 0 - 1 \\
\end{bmatrix
پرونده:Vd-Edge1.png
\begin{bmatrix
0 - 1 - 0 \\
1 - -4 - 1 \\
0 - 1 - 0 \\
\end{bmatrix
پرونده:Vd-Edge2.png
\begin{bmatrix
-1 - -1 - -1 \\
-1 - 8 - -1 \\
-1 - -1 - -1 \\
\end{bmatrix
پرونده:Vd-Edge3.png
تیز کردن
\begin{bmatrix
0 - -1 - 0 \\
-1 - 5 - -1 \\
0 - -1 - 0 \\
\end{bmatrix
پرونده:Vd-Sharp.png
Box Blur
(نرمال شده)
\frac{1{9
\begin{bmatrix
1 - 1 - 1 \\
1 - 1 - 1 \\
1 - 1 - 1 \\
\end{bmatrix
پرونده:Vd-Blur2.png
3 × 3 Gaussian Blur
(تقریبی)
\frac{1{16
\begin{bmatrix
1 - 2 - 1 \\
2 - 4 - 2 \\
1 - 2 - 1 \\
\end{bmatrix
پرونده:Vd-Blur1.png
5 × 5 Gaussian Blur
(تقریبی)
\frac{1{256
\begin{bmatrix
1 - 4 - 6 - 4 - 1 \\
4 - 16 - 24 - 16 - 4 \\
6 - 24 - 36 - 24 - 6 \\
4 - 16 - 24 - 16 - 4 \\
1 - 4 - 6 - 4 - 1 \\
\end{bmatrix
پرونده:Vd-Blur_Gaussian_5x5.png
Unsharp masking 5 × 5
بر اساس Gaussian blur
مقدار برابر ۱ و
آستانه برار ۰ میباشد
(بدون تصویر ماسک)
\frac{-1{256
\begin{bmatrix
1 - 4 - 6 - 4 - 1 \\
4 - 16 - 24 - 16 - 4 \\
6 - 24 - -476 - 24 - 6 \\
4 - 16 - 24 - 16 - 4 \\
1 - 4 - 6 - 4 - 1 \\
\end{bmatrix
پرونده:Vd-Unsharp_5x5.png
در بالا تنها مثال‌های کمی از تاثیراتی که با استفاده از کانولوشن بین کرنل‌ها و تصاویر قابل انجام است نمایش داده شده است .
منشاء
منشاء موقعیت یک خانه از هسته است که بالاتر از پیکسل خروجی فعلی است .
منشاء میتواند خارج از هسته باشد ، اگرچه معمولا یکی از عناصر هسته است .
در مورد هسته‌ی متقارن منشاء معمولا عنصر مرکزی است،در این صورت هسته باید ماتریسی فرد-فرد باشد .
کانولوشن
کانولوشن عمل اضافه کردن هر خانه (پیکسل) از عکس به خانه‌های اطرافش (پیکسل‌های همسایه‌ی محلی) است که توسط هسته وزن دهی شده‌اند.
این عمل مربوط به حالتی از کانولوشن در ریاضیات است.
باید به این نکته توجه شود که عمل ضرب ماتریس‌ها که در کانولوشن انجام میشود همان عمل ضرب تعریف شده روی ماتریس‌ها نیست ، گرچه مشابها آن را با * نشان میدهیم.
برای مثال ، فرض کنید دو ماتریس ۳ – مربعی K و M را داشته باشیم که K ماتریس هسته و M قسمتی از تصویر مورد نظر ما باشد ، کانولوشن، عملیات وارون کردن ماتریس هسته به صورت افقی و عمودی و سپس ضرب نظیر به نظیر درایه‌های دو ماتریس و در نهایت جمع همه‌ی آنهاست .
البته اگر ماتریس هسته متقارن باشد نیازی به وارون کردن افقی و عمودی ماتریس نیست زیرا در این حالت هسته‌ی وارون شده با هسته‌ی اصلی برابر است.
ماتریس‌های K و M را به شکل زیر داریم :
K =
\begin{bmatrix
a - b - c \\
d - e - f \\
g - h - i \\
\end{bmatrix
M =
\begin{bmatrix
1 - 2 - 3 \\
4 - 5 - 6 \\
7 - 8 - 9 \\
\end{bmatrix
ماتریس K را به صورت عمودی و افقی وارون میکنیم ، هسته‌ی جدید به شکل روبروست :
K =
\begin{bmatrix
i - h - g \\
f - e - d \\
c - b - a \\
\end{bmatrix
گام بعدی ضرب نظیر به نظیر درایه‌های دو ماتریس و جمع همه‌ی آنهاست :
K * M =
\Biggl(
\begin{bmatrix
1 - 2 - 3 \\
4 - 5 - 6 \\
7 - 8 - 9 \\
\end{bmatrix
\begin{bmatrix
i - h - g \\
f - e - d \\
c - b - a \\
\end{bmatrix
\Biggl)
عنصر قرار گرفته در مختصات (۲،۲) از تصویر حاصل (یعنی عنصر مرکزی) ، یک ترکیب وزن دار از تمام درایه‌های ماتریس تصویر است ، که توسط هسته وزن دهی شده‌اند:
2,2 = (i.1) + (h.2) + (g.3) + (f.4) + (e.5) + (d.6) + (c.7) + (b.8) + (a.9)
درایه‌های دیگر هم به طور مشابه مقدار دهی میشوند ، به این صورت که مرکز هسته را روی نقاط مرزی تصویر قرار میدهیم و یک حاصل جمع وزن دار را محاسبه میکنیم.
مقادیر یک پیکسل داده شده از تصویر حاصل ، با ضرب هر مقدار از ماتریس هسته در مقادیر پیکسل‌های متناظر آن در ماتریس تصویر اولیه محاسبه میشوند.
این عمل میتواند توسط شبه کد زیر بصورت یک الگوریتم نشان داده شود :
for each image row in input image:
for each pixel in image row:
set accumulator to zero
for each kernel row in kernel:
for each element in kernel row:
if element position corresponding* to pixel position then
multiply element value corresponding* to pixel value
add result to accumulator
endif
set output image pixel to accumulator
کانولوشن بین هسته و تصویر توسط کرنل تیزکردن
پیکسل‌های متناظر در تصویر نسبت به منشاء ماتریس هسته یافته میشوند.
اگر هسته متقارن بود منشاء هسته را روی پیکسل فعلی قرار دهید ، بنابراین هسته توسط پیکسل‌های مجاور هم پوشانی خواهد داشت.
حال هر یک از عناصر هسته را با پیکسلی از تصویر که متناظر ان است ضرب کرده و همه‌ی مقادیر بدست آمده را باهم جمع کنید.
اگر هسته متقارن نباشد باید قبل از محاسبه‌ی کانولوشن همانند قسمت بالا ، ماتریس هسته بصورت افقی و عمودی برعکس شود.
مدیریت حاشیه‌ی تصویر
در انجام کانولوشن روی تصویر ممکن است گاهی به پیکسل‌هایی در خارج از مرز تصویر نیاز داشته باشیم . بنابراین ، دو راه برای مدیریت حاشیه‌ی تصاویر داریم :
کانولوشن بدون حاشیه گذاری
کانولوشن بدون حاشیه گذاری
از هر پیکسلی در تصویر حاصل که نیاز به مقادیری در بیرون از حاشیه‌ها داشته باشد صرف نظر میشود ، در واقع عبور هسته از تصویر به صورتی خواهد بود که درایه‌ی اول ماتریس هسته در موقعیت (۱،۱) بر روی درایه‌ی اول ماتریس تصویر بیافتد و هسته از تصویر بیرون نزند.
این روش می‌تواند باعث شود که تصویر خروجی کمی کوچکتر شود و لبه‌های آن بریده شوند.
کانولوشن با حاشیه گذاری
کانولوشن با حاشیه گذاری
در این روش هسته را به صورتی از ماتریس تصویر عبور میدهیم که درایه‌ی مرکزی هسته (منشاء) بر روی درایه‌ی اول ماتریس تصویر بیافتد.
در این حالت هسته میتواند از ماتریس تصویر بیرون بزند که مقادیر خارج از تصویر میتوانند به انواع زیر مدیریت بشوند :
پوشش با صفر (zero padding ) :
مقادیر خارج از تصویر در این حالت برابر با صفر قرار داده میشوند.
میتوانیم در این روش به جای صفر از هر مقدار ثابت و دلخواه دیگر هم استفاده کنیم.
گسترش :
نزدیک‌ترین پیکسل‌ها به لبه‌های تصویر به اندازه‌ی لازم گسترش داده میشوند تا مقادیر مورد نیاز برای کانولوشن را فراهم کنند.
پیکسل‌های کنج را در ابعاد یک گوه‌ی ۹۰ درجه گسترش میدهیم، بقیه‌ی پیکسل‌ها بصورت خطی گسترش داده میشوند.
در این روش در واقع حاشیه‌های تصویر را تکرار میکنیم.
گسترش آینه وار :
تصویر در حاشیه‌هایش اینه وار منعکس میشود . برای مثال ، بجای خواندن پیکسلی که سه واحد خارج از لبه است پیکسلی که سه واحد داخل لبه است خوانده میشود
پوشانیدن :
تصویر در واقع پوشانده میشود (تکرار تصویر بصورت یکپارچه و بدون مرز) و برای این کار از مقادیری که در حاشیه یا کنج مخالف هستند استفاده میشود.
در این روش دور تصویر اصلی را با تکرار خود تصویر پر میکنیم.
نمونه‌هایی از انواع کانولوشن با حاشیه گذاری :
گسترش
zero padding
گسترش آینه وار
پوشانیدن
100px
100px
100px
100px
نرمال سازی
نرمال سازی به عنوان تقسیم هر عنصر در هسته بر جمع همه‌ی عناصر هسته تعریف میشود که در نتیجه ، جمع عناصر یک هسته‌ی نرمال شده برابر با یک میشود ، این کار باعث میشود که روشنایی تصویراصلاح شده به اندازه روشنایی تصویر اصلی باشد.
برای مثال ماتریس هسته‌ی استفاده شده در Box Blur را در نظر بگیرید :
K =
\begin{bmatrix
1 - 1 - 1 \\
1 - 1 - 1 \\
1 - 1 - 1 \\
\end{bmatrix
اگر همه‌ی عناصر آن را جمع کنیم عدد ۹ بدست می‌آید ، بنابراین هسته نرمال شده نیست و برای اصلاح آن باید همه‌ی درایه‌های ماتریس را بر ۹ تقسیم کرد :
K_n =
\begin{bmatrix
\frac{1{9 - \frac{1{9 - \frac{1{9 \\
\frac{1{9 - \frac{1{9 - \frac{1{9 \\
\frac{1{9 - \frac{1{9 - \frac{1{9 \\
\end{bmatrix
\frac{1{9
\begin{bmatrix
1 - 1 - 1 \\
1 - 1 - 1 \\
1 - 1 - 1 \\
\end{bmatrix
حال جمع عناصر برابر ۱ میشود پس ماتریس هسته نرمال شده است.