514 كيلو بايت زيب
Matlab يجب أن تجد القيمة القصوى للدالة findpeak يمكن فقط العثور على القيمة القصوى أحادية البعد، و opencv ليس لديه وظيفة مقابلة لها، ما يسمى بالقيمة القصوى أكبر من القيم المحيطة، ثم انظر إلى درجة الطلب على القيمة القصوى: بالنسبة لالتصاق الهدف، أستخدم طريقة القيمة القصوى هذه لمعرفة القيمة القصوى ثم + تجزئة مستجمعات المياه، التأثير أفضل من طرق التجزئة التي جربتها من قبل، ولكن أيضًا بسيطة وتستغرق وقتًا أقل.
مات dist_image، كل بقعة، عرض الذروة.
DistTransform(bwimg,dist_image, DIST_L2, 3);
المتجه<نقطة> القمم.
findPeaks(dist_image,length_imresh,peaks,everypeaks).
Mat imglabels,segresult.
watershedSegmentProc(bwimg,everypeaks,peaksshow,imglabels,segresult);
أي نقاط منطقة مركزية يتم العثور عليها على هذا النحو تكون أكثر دقة، ومن ثم يقل التقسيم الزائد عند تقسيم مستجمعات المياه.
ومع ذلك، يجب تحسين هذا النهج أكثر قليلاً، حيث إن الأقطاب التي تم العثور عليها بهذه الطريقة ليست ملائمة لهدف واحد كبير، مما سيؤدي إلى العثور على عدة أقطاب. بالنسبة للكود المحسّن، لن أنشره (للاستخدام الداخلي للشركة).
إشكال واحد: عند تصحيح الأخطاء اليوم، كيف أن نتائج مستجمعات المياه لا تزال تحتوي على مناطق غير معروفة غير محددة:
من المدهش وجود قيم في المنطقة 0-غير معروفة هنا، ومن الواضح أن النتيجة بعد إنشاء مستجمع المياه بالفعل:
/* معالجة تقسيم مستجمعات المياه
* srcmatbww-------- خريطة ثنائية قناة واحدة
* كل المراكز---- خريطة مركزية للأحجار القابلة للقسمة مع 0 أسود في الخلفية ونقطة بيضاء 255 في المركز
* imglabels------- نتيجة مستجمعات المياه الخلفية 100، والخط الفاصل هو -1 والأحجار القابلة للقسمة هي 1 ~ N (قد يكون 0 مسموح بها بالفعل)
* */
في مستجمعات المياه(Mat &srcmatbw,Mat &every centers,Mat &imglabels)
{
// int not_zero_count=countNonZero(srcmatbw);
// float_count_count_thre=srcmatbw.rows*srcmatbw.cols;
// White_count_thre_thre* = 0.8;
// إذا(((not_zero_count (int)|(int)white_count_thre)))
// {
// الإرجاع 2;
// }
عنصر Mat = getStructuringElement(MORPH_ELLIPSE, Size(11, 11));
Mat element2 = getStructuringElement(MORPH_ELLIPSE, Size(3, 3));
Mat binary_dilate.//كل المراكز
تمدد (كل المراكز، ثنائي_موسع، ثنائي_موسع، عنصر2، نقطة(-1, -1), 1);
Mat binary_8UC3.
vector resultmats.
resultmats.push_back(srcmatbw);
resultmats.push_back(srcmatbw)؛ resultmats.push_back(srcmatbw).
resultmats.push_back(srcmatbw)؛ resultmats.push_back(srcmatbw); resultmats.push_back(srcmatbw).
دمج(resultmats,binary_8UC3);
حصيرة غير معروفة.//الحصول على المساحة المجهولة، أي المساحة المتضمنة في ترسيم الخط الفاصل.
bitwise_xor(srcmatbw,binary_dilate,unknown).
//دمج صور العلامات
Mat imgstats، imgcentroid.
مكونات متصلة بإحصائيات(binary_dilate, imglabels, imgstats, imgcentroid); //علامات مجال الاتصال
imglabels.convertTo(imglabels, CV_32SC1); // تحويل نوع الصورة // تحويل نوع الصورة
imglabels = imglabels + 100;//مساحة الخلفية 100 بكسل
لـ (int i=0أنا <غير معروف الصفوف؛ أنا ++)
{
uchar* ptr = µar.ptr.ptr(i);
لـ (int j=0j< j<unknown.cols; j++)
{
إذا (255===بتر[ي])
{
imglabels.at(i, j) = 0; // بكسلات المنطقة غير معروفة هي 0
}
}
}
// تجزئة مستجمعات المياه
مستجمعات المياه (binary_8UC3، imglabels).
}
ما الذي يحدث مع هذا 0 لا أعرف؟
/**********************************************************************/
فيما يتعلق باستدعاء opencv 4.1 لنماذج .pb المدربة على tensorflow مع عقد DropOut أو BatchNorm، قال زميل جديد أن opencv c++ لا يدعم ذلك، لقد تحققت من ذلك:
تصدير الرسم البياني tensorflow مع batchnorm إلى opencv dnn - منتدى OpenCV Q&A
OpenCV: الوحدات النمطية/dnn/src/tensorflow/tf_importer.cpp | فوسيز
كيفية تحميل نموذج Keras الذي تم إنشاؤه باستخدام خلفية tensorflow في OpenCV - منتدى أسئلة وأجوبة OpenCV
Tensorflow C++ C من التدريب إلى النشر (3): تدريب ونشر شبكات CNN مع Keras - Tech Liu
C++ وعقدة phase_train - العدد #357 - davidsandberg/facenet - GitHub
تحققت من الشيفرة المصدرية لـ opencv4.1، انظر هل تمت كتابة واجهة fushBatchNorm، إذا لم تكن مدعومة، إذن opencv لماذا كتبت هذه الواجهة، وليس أضلاع الدجاج:
انظر، إنه يتعرف على هذه العقدة. أعتقد أنه يجب أن تكون الطريقة التي يحددها opencv c++ قبل أن يأتي لتحميل النموذج المدرّب تحت python.
أما بالنسبة لعقدة التسرب، فلا أراها في الشيفرة المصدرية لـ opencv في الوقت الحالي، لكنني رأيت حلولاً تم الحديث عنها على الإنترنت:
حتى أن شخصًا آخر كتب التعليمات البرمجية لتدريب النموذج مع عقد التسرب تحت python ثم مكالمات opencv c++.
لذلك لا أعتقد أن هذه ليست غير مدعومة، opencv c++ أكثر صرامة من تلك الموجودة في python، وسيتم التحميل وفقًا لقواعدها، نحن فقط ما زلنا في طريقنا لاكتشافها.
لقد وجدت اليوم بعض المعلومات المفيدة جداً حول تجزئة الصور عبر الحائط، ولكن للأسف لا يوجد رمز مطابق، هناك رمز جيد بشكل خاص يتحدث عن تجزئة الأهداف غير المنتظمة المتداخلة عن طريق مطابقة الشكل أو التركيب.
آمل أن يكون لدي الوقت لتطبيقه في مشروع آخر. فيما يلي النتيجة من الأطروحة: أشعر أنها تعمل بشكل أفضل مع المخططات المتداخلة والبعيدة عن التركيز!
بيان الموارد (يعتبر الشراء موافقة على هذا البيان): 1 - أي عملية في منصة الموقع تعتبر قد قرأت ووافقت على الجزء السفلي من اتفاقية التسجيل في الموقع وإخلاء المسؤولية، وقد كانت موارد هذا الموقع منخفضة للغاية، ولا تقدم الدعم الفني 2 - قد يكون عنوان القرص الصافي المشترك لبعض مستخدمي الشبكة غير صالح، مثل حدوث عطل، يرجى إرسال بريد إلكتروني إلى خدمة العملاء الرمز711cn#P5Tq.com (استبدل # بـ @) سيتم إرسال 3 - يوفر هذا الموقع جميع الموارد القابلة للتحميل (البرمجيات وغيرها) الموقع لضمان عدم وجود تغييرات سلبية؛ ولكن هذا الموقع لا يمكن أن يضمن دقة وأمن وسلامة الموارد، يقوم المستخدم بالتحميل حسب تقديره الخاص، ونحن نتواصل للتعلم لغرض ليس كل شفرة المصدر ليست 100% خالية من الأخطاء أو لا أخطاء؛ تحتاج إلى أن يكون لديك أساس معين لتكون قادرًا على قراءة وفهم الكود، لتتمكن من تعديل التصحيح! الشيفرة وحل الأخطاء. في الوقت نفسه، يجب على مستخدمي هذا الموقع أن يفهموا أن متجر كود المصدر لا يمتلك أي حقوق للبرامج المتوفرة للتحميل، فحقوق النشر تعود للمالك القانوني للمورد. 4 - جميع الموارد الموجودة على هذا الموقع لأغراض التعلم والبحث فقط، يرجى حذفها في غضون 24 ساعة من الموارد التي تم تنزيلها، ولا تستخدم لأغراض تجارية، وإلا فإن النزاعات القانونية الناشئة عن الموقع وناشر الموقع ذات المسؤولية الجانبية ولن يتحملها! 5 - نظرًا لطبيعة الموارد القابلة للاستنساخ، فإنه بمجرد شرائها تكون غير قابلة للاسترداد، فإن رصيد إعادة الشحن غير قابل للاسترداد أيضًا