[Algorithm] كيف يمكنني قياس التشابه بين صورتين؟


Answers

الطريقة "الكلاسيكية" لقياس هذا هو لكسر الصورة تصل إلى بعض العدد المتعارف عليه من الأقسام (ويقول 10X10 الشبكة) ومن ثم حساب الرسم البياني لقيم رغب داخل كل خلية ومقارنة الرسوم البيانية المناظرة المقابلة. ويفضل هذا النوع من الخوارزميات بسبب بساطته وانها ثابتة على التحجيم والترجمة (الصغيرة!).

Question

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

هل هناك مكتبة / أداة تفعل ذلك بالفعل؟ كيف ستنفذها؟




كذلك يمكن حقا طريقة على مستوى القاعدة لاستخدام تذهب من خلال كل لون بكسل ومقارنتها مع لون بكسل المقابلة على الصورة الثانية - ولكن هذا هو على الأرجح حل بطيء جدا .




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




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

قراءة صفحة فينديماديوبس التي أحببت، أرى أن هناك تطبيق C ++ من نفس الخوارزمية . ويفترض أن هذا سيكون من الأسهل أن نفهم.

ويبدو أنه يمكنك أيضا استخدام غكفيو .




يمكنك استخدام شبكة سيامي لمعرفة ما إذا كانت الصورتين متشابهتين أو متباينة بعد هذا البرنامج التعليمي . هذا البرنامج التعليمي مجموعة الصور مماثلة في حين يمكنك استخدام المسافة L2 لقياس تشابه صورتين.




لتوسيع على مذكرة فابهاف، والمفتاح هو مصدر مفتوح "أوتوستيتشر" التي ينبغي أن يكون بعض التبصر حول المشكلة.




يمكنك استخدام نهج رياضي نقي من O(n^2) ، ولكن سيكون مفيدا فقط إذا كنت متأكدا من أنه لا يوجد تعويض أو شيء من هذا القبيل. (على الرغم من أنه إذا كان لديك عدد قليل من الكائنات مع التلوين متجانسة فإنه لا يزال يعمل بشكل جيد.)

على أي حال، والفكرة هي حساب تطبيع نقطة المنتج من المصفوفتين. C = sum(Pij*Qij)^2/(sum(Pij^2)*sum(Qij^2)) .

هذه الصيغة هي في الواقع "جيب التمام" للزاوية بين المصفوفات (ويرد). وكلما كان التشابه أكبر ( Pij=Qij يقول Pij=Qij )، C سيكون 1، وإذا كانت مختلفة تماما i,j Qij = 1 أقول لكل i,j Qij = 1 (تجنب الانقسام الصفر)، Pij = 255 ، ثم للحجم nxn ، فإن أكبر n يكون، أقرب إلى الصفر سنحصل. (بواسطة حساب تقريبي: C=1/n^2 ).




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

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

ربما لا يكون اختبارا مثاليا، وربما أبطأ بكثير مما هو ضروري، ولكنها قد تعمل كتنفيذ سريع وقذر.