![]() |
|
مقارنة صورتين و الحصول علي الفرق بينهم Comparing Two Images and Get Diff Image - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : مقارنة صورتين و الحصول علي الفرق بينهم Comparing Two Images and Get Diff Image (/showthread.php?tid=20876) |
مقارنة صورتين و الحصول علي الفرق بينهم Comparing Two Images and Get Diff Image - silverlight - 30-06-17 مقدمة: هذا الموضوع سوف يوضح كيفية المقارنة بين صورتين و الحصول علي صورة ثالثة توضح الفارق بين الصورتين عامل السرعة في المقارنة بين الصور أمر هام جدا و أغلب الموضوعات علي النت لم تضع في اعتبارها سرعة تنفيذ الكود أيضا أغلب الموضوعات علي النت عتمدت علي استخدام Bitmap.GetPixel وتستخدمها لكي تقارن بين الألوان في الصورتين و هذا بالطبع يؤدي الي بطء في الاداء و غالبا لا يعطي نتائج مرضية للمبرمج لضمان عامل السرعة في تنفيذ الكود سوف استخدم Bitmap.LockBits و Marshal Class للحصول علي مصفوفة Byte الحاصة بألوان الصورة يجب الوضع في الاعتبار لو ان الصور المستخدمة في المقارنة ابعادها مختلفة فهنا تصبح المقارنة بلا جدوي قد يتساءل البعض منكم و ما فائدة مثل هذا الموضوع وإجابة هذا السؤال تتلخص في التالي الفكرة المستخدمة هنا مفيدة جدا في مقارنة التغييرات في الصور و هي تستخدم غالبا في كاميرات المراقبة و أشياء أخري من هذا القبيل وهناك شركات كثيرة عملها مبني علي الفكرة التي سوف نناقشها هنا لذلك قليلا ما تجد أحد يرد علي اسئلة مشابهة لأن الأمر و ببساطة شديدة عبارة عن بيزنس وغالبا لن تجد أحد من المبرمجين يكشف أسرار عمله لمبرمج أخر عموما كيفية الاستفادة من الكود متروك لمخيلة القارئ و غالبا ستجدون له استخدامات كثيرة الفكرة: المراحل التالية توضح خطوات العمل المرحلة الأولي: يكون لديك صورتان متشابهتان لكن بينهما فارق بسيط و هنا انا حصلت علي الصور التي سأستخدمها في المقارنة من موضوع مشابه و لكنه مكتوب بلغة Ruby علي ما أتذكر وحتي الموضوع الذي أخذت منه الصور يعتمد في المقارنة بين الصور علي فكرة مقارنة الألوان الموجودة في الصور باستخدام Bitmap.GetPixel المرحلة الثانية: بعد الحصول علي الصور نقوم بالحصول علي مصفوفة الألوان الخاصة بكل صورة وبمجرد أن تفعل هذا فأنت تقريبا تكون إنتهيت من نصف العمل تقريبا المرحلة الثالثة: بعد الحصول علي مصفوفة الألوان الخاصة بكل صورة نقوم بتعريف متغير عبارة عن مصفوفة ثالثة تكون السعة الخاصة بها مساوية لأي من المصفوفتان الخاصة بالصور هذه المصفوفة ستعمل بمثابة مصفوفة الألوان للصورة التي تبين الفارق بين الصورتان و لنطلق عليها مصفوفة الفروقات المرحلة الرابعة: بعد ذلك نقوم بعمل حلقة تكرارية و نقارن بين الألوان أو بين ARGB الخاصة بكل بكسل في مصفوفات الصور فإن كانت الألوان مماثلة نقوم بملئ المصفوفة الثالثة وهي مصفوفة الفروقات بلون بديل وليكن اللون Magenta مثلا و ان كانت الألوان في مصفوفات الصور مختلفة نقوم بإضافة اللون المختلف الي المصفوفة الثالثة وهي مصفوفة الفروقات أعلم جيدا ان المرحلة هذه ربما لا تكون غير واضحة للبعض منكم لكني أثق تماما انه عند تنفبذها برمجيا ستتضح لكم عند الانتهاء من هذه المرحلة تكون فعليا انتهيت بنسبة 90 في المائة من العمل المرحلة الخامسة و الأخيرة: ناخذ مصفوفة الفروقات و نحولها الي صورة الكود: الكود التالي يوضح الفكرة مع شرح تفصيلي PHP كود : ' المرحلة الأوليحاول تعكس السطران التاليان من الكود PHP كود : Dim sourceBitmap As Bitmap = PictureBox2.ImagePHP كود : Dim sourceBitmap As Bitmap = PictureBox1.Imageأتمني إن الكود يكون مفيدا للبعض منكم تقبلوا تحياتي |