سؤال

أقوم حاليًا بتطوير جزء من البرنامج باستخدام opencv و qt الذي يرسم نقاط البيانات.أحتاج إلى أن أكون قادرًا على ملء صورة من البيانات غير المكتملة.أريد أن أقحم بين النقاط التي لدي.هل يمكن لأي شخص أن يوصي بمكتبة أو وظيفة يمكن أن تساعدني.اعتقدت أنه ربما تكون طريقة opencv reMap ولكن يبدو أنني لا أستطيع تشغيل ذلك.

البيانات عبارة عن مصفوفة ثنائية الأبعاد لقيم الكثافة.أريد إنشاء صورة من نوع ما.إنه مشروع مدرسي

هل كانت مفيدة؟

المحلول

أوف!موضوع كبير.

الجواب "الصحيح" يعتمد كثيراً في مجال مشكلتك وتفاصيل مختلفة عما تفعله.

يتطلب الاستيفاء في أكثر من بُعد واحد اتخاذ بعض الاختيارات.سأفترض أنك تقوم بالتخطيط على شبكة عادية، ولكن بعض نقاط الشبكة لا تحتوي على بيانات.سؤال كبير:هل النقاط المفقودة متفرقة أم أنها تشكل نقاطًا كبيرة؟

أنت لا أستطيع أضف معلومات، لذا فأنت تحاول فقط إنشاء شيء من شأنه ذلك ينظر نعم.

اقتراح بسيط من الناحية النظرية (ولكن قد يتطلب التنفيذ بعض العمل):

لكل منطقة بها بيانات مفقودة، حدد جميع نقاط الحافة.هذا هو العثور على علامة x في هذا الشكل

oooxxooo
oox..xoo 
oox...xo
ox..xxoo
oox.xooo
oooxoooo

حيث تمثل .'s النقاط المفقودة للبيانات، بينما تحتوي علامتي x's وo's على بيانات (بالنسبة لنقطة واحدة مفقودة، سيكون هذا هو أقرب أربعة جيران).املأ كل نقطة بيانات مفقودة بمتوسط ​​فوق نقاط الحافة حول هذه النقطة.لجعلها سلسة، وزن كل نقطة 1/d حيث d هي مسافة سائق التاكسي (دلتا x + دلتا y) بين النقطتين.


من قبل كان لدينا أي تفاصيل:

في غياب هذا النوع من المعلومات، هل حاولت الاستيفاء الخطي مباشرة؟إذا كانت بياناتك كثيفة بشكل معقول، فقد يؤدي ذلك إلى حل المشكلة نيابةً عنك، ومن السهل جدًا ترميزها في السطر عندما تحتاج إليها.

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


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

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


يمنحك الاستيفاء الخطي بين (أو في الواقع الاستقراء من) نقطتين (x1، y1) و (x2، y2)

 y_i = (x_i-x1)*(y2-y1)/(x2-x1)

نصائح أخرى

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

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

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

والمشكلة عند محاولة نشر صورة مستطيلة كاملة من نقاط متفرقة هي أن من المرجح جدا أن البيانات لا تمتد إلى 4 زوايا المصفوفة. وفي هذه الحالة، سوف تفشل خطة تقوم التثليث، منذ زوايا مجموعة لا تكذب داخل بدن محدب من نقاط متفرقة. بديل ثم هو استخدام "وظائف أساس شعاعي" (كثيرا ما يختصر RBF). هناك العديد من مثل هذه المخططات التي يمكن العثور عليها، بما في ذلك Kriging، عندما تستخدم من قبل المجتمع geostatistics.

http://en.wikipedia.org/wiki/Kriging

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

http://en.wikipedia.org/wiki/Inpainting

والفكرة وراء inpainting عادة لصياغة مشكلة قيمة الحدود. وهذا هو، تحديد المعادلة التفاضلية الجزئية على المنطقة التي يوجد فيها حفرة. باستخدام القيم الحدودية المعروفة، في ملء الحفرة من خلال حل PDE لعناصر مجهولة. هذا يمكن أن يكون مكثفة حسابيا إذا كان هناك عدد كبير من عناصر مجهولة، لأنه عادة ما يتطلب حل نظام متفرق الهائل على الأقل من المعادلات الخطية. إذا كان PDE هو واحد غير الخطية، ثم يصبح مشكلة أكثر كثافة حتى الان. بسيطة، وحسن اختيار معقول لPDE هو Laplacian، مما يؤدي الى النظام الخطي أن يستنبط أيضا. مرة أخرى، ويمكنني أن تقدم حلا لمستخدم MATLAB.

http://www.mathworks.com/matlabcentral/fileexchange/4551

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

باعتبار أن هذا مشروع مدرسي بسيط، فمن المحتمل أن أسهل أسلوب استيفاء يمكن تنفيذه هو "أقرب الجيران"

بالنسبة لكل نقطة بيانات مفقودة، ابحث عن أقرب نقطة بيانات "مملوءة" واستخدمها كقيمة.

إذا كنت ترغب في تحسين النتائج أكثر قليلاً، فيمكنك القول، ابحث عن أقرب نقاط بيانات K، واستخدم متوسطها المرجح كقيمة لنقطة البيانات المفقودة.

يمكن أن يكون الوزن متناسبًا مع مسافة النقطة من نقطة البيانات المفقودة.

هناك ملايين التقنيات الأخرى، ولكن ربما يكون أقرب جار هو الأسهل في التنفيذ.

وإذا فهمت أن حاجتك هي على النحو التالي.

وأعتقد أن لديك مجموعة فرعية من س، ص، كثافة لأبعاد L من W وتريد لملء لجميع X تتراوح من 0 إلى L وY تتراوح من 0 إلى W.

وإذا كان هذا هو سؤالك، ثم حل هو الحصول على شدة الأخرى باستخدام مرشحات.

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

ويمكنك جوجل هذه الفلاتر وستحصل على إجابات لتنفيذها.

وحظا سعيدا.

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