سؤال

لقد استخدمت ويل بداية شئ أندريا فيدالدي, ، لحساب واصفات SIFT من صورتين مماثلة (الصورة الثانية هي في الواقع تصغير في الصورة من نفس الكائن من زاوية مختلفة).

الآن أنا غير قادر على معرفة كيفية مقارنة الواصفات معرفة مدى مماثلة الصور?

أعلم أن هذا السؤال غير قابل للرد إلا إذا كنت قد لعبت بالفعل مع هذا النوع من الأشياء من قبل، لكنني اعتقدت ذلك شخص فعل هذا من قبل قد يعرف هذا, ، لذلك نشرت السؤال.

لقد فعلت القليل لتوليد الواصفات:

>> i=imread('p1.jpg');
>> j=imread('p2.jpg');
>> i=rgb2gray(i);
>> j=rgb2gray(j);
>> [a, b]=sift(i);  % a has the frames and b has the descriptors
>> [c, d]=sift(j);
هل كانت مفيدة؟

المحلول

أولا، ليس من المفترض أن تستخدم VL_SIFT بدلا من SIFT؟

ثانيا، يمكنك استخدام ميزة SIFT مطابقة للعثور على المراسلات في الصورتين. إليك بعض رمز العينة:

    I = imread('p1.jpg');
    J = imread('p2.jpg');

    I = single(rgb2gray(I)); % Conversion to single is recommended
    J = single(rgb2gray(J)); % in the documentation

    [F1 D1] = vl_sift(I);
    [F2 D2] = vl_sift(J);

    % Where 1.5 = ratio between euclidean distance of NN2/NN1
    [matches score] = vl_ubcmatch(D1,D2,1.5); 

    subplot(1,2,1);
    imshow(uint8(I));
    hold on;
    plot(F1(1,matches(1,:)),F1(2,matches(1,:)),'b*');

    subplot(1,2,2);
    imshow(uint8(J));
    hold on;
    plot(F2(1,matches(2,:)),F2(2,matches(2,:)),'r*');

vl_ubcmatch () أساسا يفعل ما يلي:

لنفترض أن لديك نقطة ص في F1 وتريد العثور على المباراة "الأفضل" في F2. طريقة واحدة للقيام بذلك هي مقارنة واصف P في F1 إلى جميع الوصفات في D2. بقلب قارن، أعني العثور على مسافة Euclidean (أو قاعدة L2 لفرق الواصفات).

بعد ذلك، أجد نقطتين في F2، ويقول U & V أي مسافة أقل وثانية (قل، DU و DV) من P على التوالي.

إليك ما ينصح به Lowe: إذا DV / du> = Threshold (استخدم 1.5 في نموذج التعليمات البرمجية)، ثم هذه المباراة مقبولة؛ خلاف ذلك، تتم مطابقته بشكل غامض ويتم رفضه كمراسلات ولا نلتزم بأي نقطة في F2 إلى P. بشكل أساسي، إذا كان هناك فرق كبير بين أفضل مباريات أفضل وثاني، فيمكنك توقع أن تكون هذه مباراة الجودة.

هذا مهم لأن هناك الكثير من النطاق للمباريات الغامضة في الصورة: تخيل نقاط مطابقة في بحيرة أو مبنى مع العديد من النوافذ، يمكن أن تبدو الواصفات مشابهة جدا ولكن المراسلات مخطئة بوضوح.

يمكنك القيام بالمطابقة بأي عدد من الطرق .. يمكنك أن تفعل ذلك بنفسك بسهولة شديدة مع MATLAB أو يمكنك تسريعها باستخدام شجرة KD أو أقرب ما يشبه البحث فلان التي تم تنفيذها في opencv..

تحرير: أيضا، هناك عدة تطبيقات الشجرة دينار كويتي في ماتلاب.

نصائح أخرى

يجب أن تقرأ ديفيد لوي ورق, التي تتحدث عن كيفية القيام بذلك بالضبط. يجب أن تكون كافية، إذا كنت ترغب في مقارنة الصور ذات الكائن نفسه بالضبط. إذا كنت ترغب في مطابقة الصور لأشياء مختلفة من نفس الفئة (مثل السيارات أو الطائرات) قد ترغب في إلقاء نظرة على هرم مباراة نواة بواسطة غريمان وداريل.

حاول مقارنة كل واصف من الصورة الأولى مع واصفات من الثانية الموجودة في المنطقة المجاورة المقربة (باستخدام مسافة Euclidean). وبالتالي، تقوم بتعيين درجة لكل واصف من الصورة الأولى بناء على درجة التشابه بينها وبين واصف الجيران الأكثر مماثلة من الصورة الثانية. يمنحك التدبير الإحصائي (المبلغ، المتوسط، التشتت، يعني الخطأ، إلخ) من كل هذه الدرجات تقديرا لمشافته الصور. تجربة مع مجموعات مختلفة من حجم المنطقة المجاورة والإحصاء لإعطائك أفضل إجابة.

إذا كنت ترغب في مقارنة الصورة التكديب والمتناوب مع مركز التناوب المعروف، فيمكنك استخدام الارتباط المرحلة في إحداثيات سجل القطبية. عن طريق الحدة من الذروة والرسوم البيانية لارتباط المرحلة التي يمكنك الحكم على مدى إغلاق الصور. يمكنك أيضا استخدام المسافة Euclidean على القيمة المطلقة لمعاملات فورييه.

إذا كنت تريد مقارنة واصف SIFT، بجانب مسافة Euclidean، يمكنك أيضا استخدام "المسافة المنتشرة" - الحصول على واصف على نطاق أكثر تقدما على نطاق أكثر تقدما وتصفحهم مع واصف أصلي. وبهذه الطريقة "الحجم الكبير" تشابه ميزة سيكون لها مزيد من الوزن.

إذا كنت ترغب في القيام بمطابقة بين الصور، فيجب عليك استخدام VL_ubCmatch (في حالة عدم استخدامها). يمكنك تفسير نتائج الإخراج لمعرفة مدى إغلاق الميزات. هذا يمثل مربع المسافة Euclidean بين واصف ميزة المطابقة. يمكنك أيضا تغيير العتبة بين أفضل مباريات و 2 أفضل تطابق كمدخل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top