در حوزه پردازش تصویر برای اعمال یک ماسک بر روی تصویر نیازمند عملگر های ریاضی همچون کرولیشن و کانولوشن می باشیم. به علت ماهیت دو بعدی تصویر کانولوشن و کرولیشن باید به صورت دو بعدی مورد بررسی قرار بگیرد.
کرولیشن دو بعدی
همانطور که در درس سیگنال ها یاد داریم کانولوشن به معنای ضرب در حوزه فرکانس می باشد. در واقع با کانولوشن در زمان می خواهیم عمل فیلترینگ یا ضرب فیلتر در تصویر در حوزه فرکانس را نشان دهیم.
تفاوت جزیی در کرولیشن و کانولوشن وجود دارد اما اصول آن دو بر مبنای ضرب نقطه ای ماسک انتخابی (فیلتر) بر المان های تصویر و سپس جمع آن ها می باشد.
همانطور که مشاهده می شود لبه ماسک از تصویر بیرون افتاده است برای اینکه متلب این مساله را درک کند اصولا پدینگی (سطر و ستون صفر) اطراف ماتریس تصویر ایجاد می شود.
تفاوت کانولوشن و کرولیشن را می توان به وضوع در فرمول زیر مشاهده کرد.
تابع کرولیشن دقیقا مشابه شکل بالا عمل می کند یعنی ماسک مربوطه پس از اعمال به قسمتی از تصویر و مجموع عناصری که از ضرب ارایه به ارایه آن بر تصویر بدست آمده است، یک واحد شیف افقی ( عمودی) پیدا می کند تا تمامی سطر ها و ستون های ماتریس تصویر را پوشش دهد و مقادیر جایگزین برای تک تک ارایه های ماتریس تولید شود.
رابطه ریاضی کرولیشن دو بعدی به صورت زیر می باشد:
کانولوشن دو بعدی
مفهوم کانولوشن در واقع همان بازتاب ضرب فیلتر در حوزه فرکانس را بهمراه دارد. یعنی برای اعمال فیلتر در حوزه زمان اول باید ماسک یا هما فیلتر را 180 درجه بچرخانیم و سپس مشابه شکل بالا در تصویر ضرب نقطه ای کرده و در نهایت جمع کنیم.
در متلب روش های مختلفی برای انجا کانولوشن و کرولیشن دو بعدی وجود دارد. که تابع imfilter از رایج ترین این توابع می باشد و corr یا conv به عنوان ورودی تابع گرفته و تعیین کننده نحوه عمل فیلترینگ به صورت کانولوشن و کرولیشن می باشد.
clc
clear all
close all
%% convolution-vs-correlation
I = imread('cameraman.tif');
kernel = 1/9.*ones(3); %mask
con = imfilter(I,kernel,'conv'); %convolution
cor = imfilter(I,kernel,'corr'); %correlation
subplot 121; imshow (cor)
title('correlation')
subplot 122; imshow (con)
title('convolution')
در صورتی که ماتریس کرنل متقارن باشد چرخش در آن بی تاثیر بوده و نتایج کانولوشن و کرولیشن یکسان خواهد بود.