514KBZIP
matlab должны найти экстремальное значение функции findpeak может найти только одномерный экстремальное значение, и opencv не имеет соответствующей функции, так называемый экстремальное значение больше, чем окружающие значения, а затем посмотреть, какая степень спроса на экстремальное значение: для адгезии цели, я использую этот метод экстремального значения, чтобы узнать экстремальное значение, а затем + водораздел сегментации, эффект лучше, чем методы сегментации, которые я пробовал раньше, но и простой и трудоемкий меньше.
Mat dist_image, eachpeaks, peaksshow.
distanceTransform(bwimg,dist_image, DIST_L2, 3);
вектор<Пункт> пики.
findPeaks(dist_image,lengthresh,peaks,eachpeaks).
Mat imglabels,segresult.
watershedSegmentProc(bwimg,eachpeaks,peaksshow,imglabels,segresult);
Любые точки центральной области, найденные таким образом, являются более точными, и при разбиении водораздела меньше пересегментации.
Однако этот подход следует оптимизировать, так как найденные таким образом полюса не дружат с одной большой задачей, в которой будет найдено несколько полюсов. Что касается оптимизированного кода, то я не буду его публиковать (для внутреннего пользования компании).
Одна загвоздка: при отладке сегодня выяснилось, что в результатах водораздела все еще остаются неприсвоенными неизвестные области:
Удивительно, что здесь есть значения в области 0-неизвестно, очевидно, это результат после создания водораздела:
/* Обработка деления водораздела
* srcmatbw-------- двоичная карта Одноканальный
* everycenters---- карта центра делимых камней с черным 0 на фоне и белой точкой 255 в центре
* imglabels------- результат водораздела фон 100, разделительная линия -1, делимые камни 1~N (может быть 0 уже допустимо)
* */
int watershedSegmentProc(Mat &srcmatbw,Mat &everycenters,Mat &imglabels)
{
// int not_zero_count=countNonZero(srcmatbw);
// float white_count_thre=srcmatbw.rows*srcmatbw.cols;
// white_count_thre*=0.8;
// if((not_zero_count(int)white_count_thre))
// {
// возврат 2;
// }
Mat element = getStructuringElement(MORPH_ELLIPSE, Size(11, 11));
Mat element2 = getStructuringElement(MORPH_ELLIPSE, Size(3, 3));
Mat binary_dilate.//каждый центр
dilate(everycenters, binary_dilate, element2, Point(-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).
merge(resultmats,binary_8UC3);
Мат неизвестен.//Получите неизвестную площадь, т.е. площадь, участвующую в демаркации разделительной линии.
bitwise_xor(srcmatbw,binary_dilate,unknown).
//Слияние изображений маркеров
Mat imgstats, imgcentroid.
connectedComponentsWithStats(binary_dilate, imglabels, imgstats, imgcentroid); //Маркеры поля подключений
imglabels.convertTo(imglabels, CV_32SC1); // Преобразование типа изображения
imglabels = imglabels + 100;//Область фона равна 100 пикселям
для (int i=0;i<unknown.rows;i++)
{
uchar* ptr = unknown.ptr(i);
для (int j=0;j<unknown.cols;j++)
{
если (255==ptr[j])
{
imglabels.at(i, j) = 0; // Пиксели неизвестной области равны 0
}
}
}
// Сегментация водосбора
watershed(binary_8UC3, imglabels).
}
Что происходит с этим 0, я не знаю?
/**********************************************************************/
Что касается opencv 4.1, вызывающего модели .pb, обученные tensorflow, с узлами DropOut или BatchNorm, то новый коллега сказал, что opencv c++ не поддерживает это, я проверил:
Экспорт графа tensorflow с batchnorm в opencv dnn - Форум OpenCV Вопросы и ответы
OpenCV: modules/dnn/src/tensorflow/tf_importer.cpp | Fossies
Как загрузить сборку модели Keras с бэкендом tensorflow в OpenCV - Форум OpenCV Q&A
C++ и узел phase_train - Выпуск #357 - davidsandberg/facenet - GitHub
Проверил исходный код opencv4.1, вижу написан ли интерфейс fushBatchNorm, если не поддерживается, то opencv зачем писать этот интерфейс, не куриные же ребрышки:
Видите, он распознает этот узел. Я думаю, что это просто должно быть так, как указано в opencv c++, прежде чем загружать обученную модель под python.
Что касается узла выпадения, я не вижу его в исходном коде opencv на данный момент, но я видел решения, о которых говорили в Интернете:
А другой парень даже написал код для обучения модели с выпадающими узлами под python и последующим вызовом opencv c++.
Так что я не думаю, что они не поддерживаются, просто opencv c++ немного строже, чем в python, и он будет загружаться по своим правилам, мы просто еще не разобрались с ними.
Сегодня я нашел на стене очень полезную информацию о сегментации изображений, но, к сожалению, там нет соответствующего кода, но есть особенно хороший, который рассказывает о сегментации перекрывающихся нерегулярных целей путем сопоставления или подгонки формы.
Надеюсь, у меня будет время реализовать его для другого проекта. Ниже приведен результат диссертации: я чувствую, что он лучше работает для диаграмм с большим количеством перекрытий и расфокусированных диаграмм!
Заявление о ресурсах (покупка считается согласием с этим заявлением): 1. любая операция в веб-платформе считается прочитал и согласился с нижней части сайта регистрационное соглашение и отказ от ответственности, этот сайт ресурсы были ультра-низкая цена, и не предоставляет техническую поддержку 2. некоторые пользователи сети поделиться сетевой адрес диска может быть недействительным, таких как возникновение сбоев, пожалуйста, отправьте письмо в службу поддержки код711cn#qq.com (замените # на @) будет составлен, чтобы отправить 3. этот сайт предоставляет все загружаемые ресурсы (программное обеспечение и т.д.) сайт, чтобы гарантировать, что никаких негативных изменений; но этот сайт не может гарантировать точность, безопасность и целостность ресурсов, пользователь загружает по своему усмотрению, мы общаемся, чтобы узнать для целей не все исходный код не 100% безошибочно или нет ошибок; вы должны иметь определенную основу, чтобы быть в состоянии читать и понимать код, чтобы быть в состоянии изменить отладку! код и устранять ошибки. В то же время, пользователи данного сайта должны понимать, что Source Code Convenience Store не владеет никакими правами на программное обеспечение, предоставленное для скачивания, авторские права принадлежат законному владельцу ресурса. 4. все ресурсы на этом сайте только для обучения и исследовательских целей, пожалуйста, должны быть удалены в течение 24 часов после загрузки ресурсов, не используйте в коммерческих целях, в противном случае юридические споры, возникающие с сайта и издателя залога ответственности сайта и не будет нести! 5. в связи с воспроизводимым характером ресурсов, приобретенные ресурсы не подлежат возврату, баланс пополнения также не подлежит возврату