سؤال

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

proj_x ، proj_y <-> cam_x ، cam_y لأزواج النقطة المبعثرة

كانت خطتي الأصلية هي تنظيم هذه الخريطة باستخدام GridData وظيفة MathScript. هذا من شأنه أن يعمل بشكل جيد في ماتلاب ، على النحو التالي

[pgridx, pgridy] = meshgrid(allprojxpts, allprojypts)
fitcx = griddata (proj_x, proj_y, cam_x, pgridx, pgridy);
fitcy = griddata (proj_x, proj_y, cam_y, pgridx, pgridy);

والعكس للكاميرا لرسم خرائط جهاز العرض

لسوء الحظ ، يتسبب هذا الرمز في نفاد لابفيو من الذاكرة على خطوة Meshgrid (الكاميرا هي 5 ميجابكسل ، وهو ما يبدو أنه أكثر من اللازم لصالح LabView)

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

لذا فإن سؤالي هو واحد مما يلي

1) كيف يمكنني أن أتطلع من نقاط متناثرة إلى شبكة في OpenCV ؛ (أي ، مع إعطاء z = f (x ، y) للقيم المبعثرة من x و y ، كيفية ملء صورة بـ f (im_x ، im_y)؟

2) كيف يمكنني تنفيذ صورة تحويل صورة 1 إلى صورة 2 ، بالنظر إلى أنني أعرف رسم خرائط متناثرة للنقاط في نظام الإحداثيات 1 لإحداثيات النظام 2. يمكن تنفيذ ذلك إما في LabView أو OpenCV.

ملاحظة: أقوم بتمييز هذا المنشور Delaunay ، لأن هذه طريقة واحدة للقيام باستيفاء متناثر ، لكن العلامة الأفضل ستكون "استيفاء متناثرة"

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

المحلول

لذلك ينتهي هذا إلى أن يكون إصلاحًا محددًا للأخطاء في LabView 8.5. ومع ذلك ، نظرًا لأنها موثقة بشكل سيء ، وقضيت يومًا من الألم ، فأنا أظن أنها سأقوم بنشرها حتى يصادفها شخص آخر من هذه المشكلة.

1) القنابل الشبكية. لا أعرف متى تم إصلاح هذا ، بالتأكيد خطأ في 8.5. الحل: استخدم وظيفة تشبه meshgrid على منصة الاستيفاء والاستقراء بدلاً من ذلك. أو الترقية إلى LV2009 التي تعمل على ما يبدو (بفضل underflow)

2) Griddata معيب في 8.5. هذا موثق بشكل سيء. تقول ملاحظات الترقية 8.6 أن مشكلة في Griddata والإعداد "المكعب" ، لكنها حقيقة أيضًا مشكلة في الإعداد الخطي الافتراضي. الحلول في الترتيب التنازلي لـ Kludginess: 1) تمرير علامة "V4" ، والتي تقوم بنوع من الاستيفاء المتدني ، ولكن ليس لديه أخطاء. 2) الترقية إلى الإصدار 8.6 على الأقل. 3) تغلب على مهندسي NI مع القصب حتى يقوموا بتوثيق الأخطاء بشكل صحيح.

3) تمكنت من استخدام وظيفة Remap OpenCV للقيام بالتحول الفعلي من صورة إلى أخرى. لقد حاولت فقط استخدام MATLAB المدمج في Interp2 VI ، لكنها اختنق في صفائف كبيرة وأعطتني أخطاء الذاكرة. من ناحية أخرى ، من السهل إلى حد ما تعيين صورة IMAQ لصورة IPL ، لذلك هذا ليس بهذا السوء ، باستثناء إضافة المكتبة الخارجية.

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