همبستگي
نحوه ي محاسبه ي همبستگي مانند كانولوشن است با اين تفاوت كه در محاسبات آن ديگر لازم نيست كرنل همبستگي را بچرخانيم. بنابراين، اگر مثال ارائه شده در بخش قبل (براي كانولوشن) را بخواهيم براي همبستگي مجدداً در نظر بگيريم، شكل اخير به صورت زير اصلاح مي شود:
فيلتر كردن تصاوير به كمك دستور imfilter
استفادهبراي انجام فيلتر كردن (چه كرنل كانولوشن و چه كرنل همبستگي) مي توان از دستور imfilter كرد. براي مثال، اگر بخواهيم يك فيلتر متوسط گير را پياده سازي كنيم، به صورت زير مي توان عمل كرد:
I = imread(‘coins.png’);
h = ones(5,5) / 25;
I2 = imfilter(I,h);
imshow(I), title(‘Original Image’);
figure, imshow(I2), title(‘Filtered Image’)
نتیجه:
انواع داده اي
نوع داده ايِ تصوير خروجي همان نوع داده اي تصوير ورودي است. دستور imfilter محاسبات خود را به صورت مميز شناور و با دقت مضاعف انجام مي دهد اما حاصل نهايي را با توجه به نوع تصوير خروجي و محدوده ي آن، برش مي زند و يا اين كه گرد مي كند. به دليل اين عمل برش، ممكن است شما بخواهيد ابتدا نوع تصوير را تغيير دهيد تا در نتيجه ي فيلتر، اطلاعات كمتري را از دست دهيد. براي مثال در برنامه ي زير تصوير ورودي از نوع double است به همين دليل خروجيِ دستور imfilter مقادير منفي را به خود مي گيرد:
>>A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>>h = [‐1 0 1]
h =
‐1 0 1
>>imfilter(A,h)
ans =
24 ‐16 ‐16 14 ‐8
5 ‐16 9 9 ‐14
6 9 14 9 ‐20
12 9 9 ‐16 ‐21
18 14 ‐16 ‐16 ‐2
اما اگر تصوير ورودي را از نوع 8 UINT تعريف كنيم، به دليل عمل برش، خروجي فيلتر مقادير منفي نخواهد داشت:
>>A = uint8(magic(5));
>>imfilter(A,h)
ans =
24 0 0 14 0
5 0 9 9 0
6 9 14 9 0
12 9 9 0 0
18 14 0 0 0
ملاحظه مي كنيد كه مقادير منفي به صفر برش زده مي شوند.
نویسنده: دکتر هادی گرایلو