کلیدستان

نسخه‌ی کامل: محاسبه sum of squared distances دو تصویر غیر هم سایز
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام. 
برای محاسبه SSD یا sum of squared distances دو تصویر غیر هم سایز چه دستوری در متلب وجود داره؟؟ اگر دو  تصویر هم سایزباشند فکر کنم روش زیر درست باشه

کد:
ssd = sum(sum((template-image)^2));

ولی برای بدست آوردن SSD یا SAD دو تصویر غیر هم سایز راهی پیدا نکردم. چطور میشه فرمولش رو پیاده سازی کرد؟ ممنون میشم اگه کسی راهی میدونه کمک کنه
متاسفانه کسی انگار جواب نمیده ولی در هر صورت من سوالمو یه جور دیگه می پرسم من برای اینکه بتونم دو تا تصویر رو از هم کم کنم که یکی تصویر چشمه و یکی کل صورت باید تصویر چشم رو پیکسل به پیکسل از اول تصویر صورت مقایسه کنم و جلو برم یعنی در هر مقایسه از تصویر صورت یک پچ به اندازه پچ چشم بگیرم و این دو رو از هم کم کنم حالا مشکل من اینکه که حلقه های for برای اینکار رو بلد نیستم چجوری بنویسم من دستور زیر رو نوشتم


کد:
a='C:\Users\Documents\MATLAB\exercise 3 template matching\einstein.jpg';
b=imread(a,'jpg');
image0=rgb2gray(im2double(b));
%figure(1);imshow(image0);
[ch1,cw1]=size(image0);
image=image0;

c='C:\Users\Documents\MATLAB\exercise 3 template matching\eye template.jpg';
d=imread(c,'jpg');
template0=rgb2gray(im2double(d));
%figure(2);imshow(template0);
[cht,cwt]=size(template0);
template=template0;

SSD=0

temp=0;
for i=1:ch1
    for j=1:cw1
        for i=1:cht
            for j=1:cwt
                temp=temp+template(i,j);

            end
        end
    end
end
SSD=sum(sum(temp-template).^2);

figure(50);imshow((SSD));

که هر بار اجراش می کنم به  جای تصویر یک نقطه سفید بهم نشون میده میشه لطفا کمک کنید بفهمم اشتباهم کجاست؟؟ منظور از template همون پچ چشمه،تصویر ورودی اول همون تصویر کل صورته تو حلقه for  سعی کردم یه پچ جدید به سایز پچ چشم از صورت بگیرم و مشکل همینجاست
ممنون
سلام.
بخش زیر از کدهاتون غلط است :

کد:
for i=1:ch1
     for j=1:cw1
         for i=1:cht
             for j=1:cwt
                 temp=temp+template(i,j);

             end
         end
     end
end

شما 4 حلقه تو در تو تعریف کرده اید که نام پارامترهای حلقه، دو به دو، یکسان می باشد. نمی دانم هدفتان چه بوده است، اما در حلقه های تو در تو، نباید پارامترهای حلقه با نام یکسان در نظر بگیریم، زیرا نتیجه، غلط می شود.
همچنین به بخش زیر از کدها توجه کنید :

کد:
SSD=sum(sum(temp-template).^2);

نتیجه عبارت بالا، یک عدد است (با توجه به استفاده از دستور sum) و به همین دلیل است که در شکل خروجی، تنها یک نقطه رسم می شود.

متوجه شدم..ممنون از پاسختون ..