من همیشه از عکس های بلوری و تار خوشم میومد . بعضی وقت ها عکس ها رو با فتوشاپ بلور میکردم که بتونم برای پس زمینه گوشیم استفاده کنم ، اما یکبار که یک عکس تقریبا بزرگ رو خواستم بلور کنم ، متوجه سنگینی این پروسه برای سیستم شدم ، خب راستش میدونستم که اینکار پردازش تصویره و پردازش تصویر همیشه سنگینه ، اما میخواستم بیشتر بدونم.
بریم که علمی تر به این موضوع بپردازیم...
الگوریتم ها و انواع مختلفی برای بلور کردن عکس ها داریم اما چیزی که اینجا بهش میپردازیم ، بلور گاوس - gussian blur است.
این الگوریتم خیلی پیچیده نیست ، در حقیقت نوعی هموار کردن (smoothing) است ، که میتواند جاهای مختلف استفاده شود.
خب بیاید یکم دقیق تر بررسی کنیم :
۱. تئوری :
اینطور فرض کنید که این مدل بلور کردن ، یعنی قرار دادن یک پیکسل با مقدار میانگین نسبت به پیکسل های مجاورش :
در این شکل ، ۲ مرکز نقاط است و ۱ها نقطه های مجاور اند.
نقطه ی مرکزی ، باید مقدار میانگین نقطه های مجاورش را بگیرد ، به این کار میگیم هموار کردن (smoothing) ، نقطه ی مرکزی اطلاعات خودش را از دست میدهد :
اینجا جمع هشت نقطه مجاور نقطه ی مرکزی ، ۸ است و میانگین آن میشود ۸/۸=۱ ، و این مقدار را در نقطه ی مرکزی قرار میدهیم.
اگر دامنه ی مقادیر هر مربع خیلی زیاد باشد ، افکت بلور هم واضح تر است.
در این عکس میبینیم که هر چقدر شعاع (radius) بیشتر باشد ، یعنی مربع ها بزرگتر باشند ، عکس بیشتر بلور میشود :
اما اینجا یک مسٔله پیش میاد :
کوچکترین مربع را در نظر میگیریم و مقدار مناسب را در نقطه مرکزی آن قرار میدهیم ، اما همینطور که پیش میرویم مربع ها بزرگتر میشوند و مقدار نقاط مرکزی مدام عوض میشود.
برای حل این مسٔله این موضوع را در نظر میگیریم که نزدیک ترین نقاط مجاور نقطه ی مرکزی باید ارزش بیشتری نسبت به نقاط دورتر داشته باشند.
برای راحتی اینطور فرض کنیم که کسی که به غذا نزدیک تر است باید بوی بیشتری را نسبت به افراد دورتر حس کند (خیلی گرسنمه :-خنده ).
پس نسبت به نزدیک بودن نقاط به نقطه ی مرکزی به آن ها وزن میدهیم ، هرچقدر نقاط مجاور به نقطه ی مرکزی نزدیک تر بودند ، وزن آن ها هم بیشتر است.
۲. وزن دهی توزیع شده نرمال - weight of normal distribution :
این مدل ریاضی یک مدل قابل قبول برای وزن دهی نقاط است. به صورت گرافیکی میتونیم اینطور بگوییم ، سطح صافی که هر چقدر به مرکز آن نزدیک میشویم ، ارتفاع آن بیشتر میشود :
۳. تابع گاوس :
توزیع نرمال بالا یک بعدی بود ، اما به توزیع نرمال دو بعدی نیاز داریم :
تابعی داریم برای نشان دادن تراکم نقاط توزیع شده که به آن تابع گاوس میگوییم.
برای تک بعد داریم :
و میتوانیم نتیجه بگیریم که برای دو بعد ، تابع به صورت زیر است :
با این تابع حالا میتوانیم وزن هر نقطه را حساب کنیم.
۴. ماتریس وزن ها :
صفحه ی مختصات دو بعدی را در نظر بگیرید ، مربعی که بالاتر مثال زده بودیم را طوری روی محور قرار میدهیم که نقطه ی مرکزی آن در مرکز محور قرار گیرد :
خب حالا برای محاسبه ی ماتریس وزن دار باید مقدار σ را مساوی ۱.۵ قرار دهیم و پس از ساده سازی داریم :
خب حالا وزن هر نقطه نسبت به نقطه ی مرکزی را داریم ، خیلی نزدیک شدیم :)
۵. محاسبه ی بلور گاوس:
فرض کنید این اعداد نشان دهنده ی رنگ هر پیکسل اند.
و بعد ضرب کردن این مقادیر در ماتریسی که بالا بدست آوردیم ، خواهیم داشت :
و اینکار را برای همه نقاط انجام میدهیم تا عکس بلور تولید شود.
۶ . نقاط گوشه ای :
گوشه ترین نقطه ی یک عکس قطعا نقطه ی مرکز مربعی نیست ، پس برای این نقطه چیکار کنیم؟
نقاط مجاور آن را دقیقا در سمت دیگرش تکرار میکنیم ، حالا این نقطه هم نقطه ی وسط مربع جدیدی هست که الگوریتم روی آن قابل اجرا است.
حالا نتیجه میگیریم که در برنامه ای مثل فتوشاپ ، وقتی شعاع این فیلتر بلور را بیشتر کنیم ، عکس خیلی بلور میشود و پردازش سنگین تری انجام میشود و هرچقدر شعاع بلور کم باشد عکس واضح تر است .
و حالا میدونیم پشت یک افکت ساده ی بلور ، چه اتفاقاتی میفته...
منابع :
www.pixelstech.net/article/1353768112-Gaussian-Blur-Algorithm
http://computergraphics.stackexchange.com/questions/39/how-is-gaussian-blur-implemented