fotomer
Пользователи-
Количество публикаций
98 -
Зарегистрирован
-
Посещение
-
Days Won
14
Все публикации пользователя fotomer
-
Кто-нибудь Basler или аналогами в последнее время закупался? Если да, то можно ссылку.
-
Вообще именно фокус никогда точно не угадывается, его я на контрольном отрезке точно выставлял. Если интересно в свое время писал программку http://xn--e1anfamim.xn--p1ai/index.php/novosti/iphotomeasure здесь процесс калибровки http://xn--e1anfamim.xn--p1ai/index.php/novosti/kalibrovka-kamery Только снимки должны быть пестрые и не однообразные, шахматные доски не подходят. Даже дешевые смартфоны потом точно измеряют
-
Вы хотите по 2 снимкам с такой малой базой получить премлимую 3-d карту местности? Ничего не получится, возьмите какой-нибудь софт типа Agisoft или 3DF Zephyr Free (он бесплатен) и поэксперементируте там. Кстати 3DF Zephyr Free может делать калибровку по набору произвольных фоток (штук 30) и по опыту лучше чем с шахматной доской. Если просто нужно измерять расстояния можно использовать Aruco с 4 точками, которое выдаст координаты и направление камер. Еще Aruco нельзя в лоб снимать, точно резко падает, нужно чтоб квадрат на снимках был типа трапеции
-
Я в свое время тоже в этой математике разбирался, потом понял что проще найти готовое решение и в нем разобраться, типа такого https://www.opensfm.org/ Летал на дроне и вполне хорошие модели получались http://фотомер.рф/index.php/novosti
-
Еще можно попробовать антибликовый спрей, он реально улучшает картину.
-
А что вы собираетесь делать с полученной cv::Мат картинкой? Многие алгоритмы вообще онлайн не работают на обычном железе.
-
Собрал 4.0.1 с флагом WITH_OPENM , теперь все нормально, ошибок нет.
-
Не, с любой картинкой, и падает только с CORNER_REFINE_APRILTAG, остальные работают. Еще cvtColor без помарок работает? А то с флагом WITH_OPENM в консоль это пишется "User Error 1001: argument to num_threads clause must be positive". Как понимаю где-то внутри указывается отрицательное кол-во потоков. Компилятор Visual Studio 2015 x64. Mat mat, mat2; mat = imread("1.jpg"); cvtColor(mat, mat2, COLOR_BGR2GRAY); Upd Сейчас собрал на чистой Win7 с компилятором VS 2014, результат тот же. Upd2 Пересобрал отдельно либу opencv_core сняв для него использование openmp, остальные не трогал. И теперь все нормально работает. O как.
-
int main() { try { float kd[5] = { 0.106, 0, 0, 0, 0 }; float cm[9] = { 5765, 0.0000000000000000e+00, 2592, 0.0000000000000000e+00, 5765, 1728, 0.0000000000000000e+00, 0.0000000000000000e+00, 1.0000000000000000e+00 }; Mat cameraMatrix(3, 3, CV_32F, cm); Mat distK(1, 5, CV_32F, kd); Mat mat; mat = imread("1.jpg"); Ptr<aruco::Dictionary> dictionary{ aruco::getPredefinedDictionary(aruco::DICT_4X4_1000) }; Ptr< aruco::DetectorParameters > detectorParams{ aruco::DetectorParameters::create() }; detectorParams->cornerRefinementMethod = aruco::CORNER_REFINE_SUBPIX; //detectorParams->cornerRefinementMethod = aruco::CORNER_REFINE_APRILTAG; vector<vector<Point2f> > corners1, rejectedCorners1; vector<int> ids1; aruco::detectMarkers(mat, dictionary, corners1, ids1, detectorParams, rejectedCorners1, cameraMatrix, distK); } catch (cv::Exception ex) { cout << ex.what() << endl; } return 0; } Вот простенький код. OpenCV 4.0.0. собранный без флага WITH_OPENMP - все работает, углы aruco корректно определяются. Сборка с флагом WITH_OPENMP, флаг в коде aruco::CORNER_REFINE_SUBPIX работает, но в консольку пишется "User Error 1001: argument to num_threads clause must be positive", это внутри aruco::detectMarkers прилетает из функции _convertToGrey. А с флагом aruco::CORNER_REFINE_APRILTAG выкидывается исключение "OpenCV(4.0.0) c:\opencv\opencv_contrib-master\modules\aruco\src\zarray.hpp:109: error: (-215:Assertion failed) idx >= 0 in function 'cv::aruco::_zarray_get'" На версиях 3.х с WITH_OPENMP все работало нормально.
-
Я просто удалил сборку 4.0 с openmp, на SDD мало места. Потом тогда опять соберу и попробую ошибку воспроизвести.
-
Эта функция aruco::detectMarkers с флагом aruco::CORNER_REFINE_APRILTAG. На 3.4.1 все работало с WITH_OPENMP, собрал 4.0 с WITH_OPENMP, падает. Без все работает.
-
Не в курсе, про 4.0 написано Our parallel_for can now use the pool of std::threads as the backend. Я собрал традиционно с флагом WITH_OPENMP, как и на предыдущих 3.х. И далее с 4.0 распознавалка Aruco падает где-то внутри либы на потоках. Если собрать без этого флага, то все работает нормально. Судя по картинке Винда, как писали, там с Cmake-Gui все отлично собирается.
-
Выбор камеры для системы технического зрения
fotomer replied to DenisN03's topic in Обсуждение общих вопросов
Это же обычная дешевая вебка, широкий угол из-за искажений не есть хорошо для 3D реконструкции. -
Выбор камеры для системы технического зрения
fotomer replied to DenisN03's topic in Обсуждение общих вопросов
IP все жмут не по детски, и на максимальных настройках тоже. Попробовать дорогую вебку типа http://www.pleer.ru/product_418896_Logitech_Webcam_Brio_960_001106.html Или поискать на Али камеру с ключевым словом Global Shutter. https://www.aliexpress.com/popular/camera-global-shutter.html -
Выбор камеры для системы технического зрения
fotomer replied to DenisN03's topic in Обсуждение общих вопросов
Вебки шумят и разрешение не особое. Вот хороший вариант, правда дорогой https://www.baslerweb.com/ru/ Еще у бастлера глобальный затвор, все jpg из видео будут без смазов. -
А что за девайс на картинке?
-
В магазине есть несколько одиночных камер, их взаимное расположение известно, зона видимости перекрывается. В магазин входит несколько или больше человек, и нужно произвести трекинг отдельных людей по магазину. Распознавание лиц не подходит т.к. человек в камере может быть боком, спиной или сразу несколько человек в разных вариациях. Где-то в зарубежных статьях проскакивало про EM-алгоритм кластеризации для трекинга людей в толпе, но без какой-либо конкретики. Выделять сеткой голову и плечи вне зависимости от ракурса получается, но как применять к ним ЕМ-алгоритм не совсем понятно. Может у кого есть какие идеи?
-
OK. Еще буду пробовать фотограмметрию притянуть, предполагая что человек идет параллельно полу.
-
Спасибо, посмотрю.
-
Вот примерный вид картинок geoTiff, скриншоты из QGIS, карта OSM standart, видно что привязанные картинки совпадают с рельефом местности, на первой картинке дорожки, на второй линия забора и граница участка, на третьей река.
-
Есть текстурированная сетка, как на картинке, координаты сетки отмасштабированны и привязаны в соответcтвии с GPS, т.е. openMVG извлекает GPS координаты из картинок, расчитывает масштаб, поворот, перенос для сетки и умножает все координаты на эти величины. Нужно из этой сетки сделать geoTiff, но как это сделать совершенно не понятно, поиск ничего особо не дает. OpenDroneMap делает перевод через какие-то свои хитрые форматы и использовать их затруднительно. Может у кого есть идеи как сделать geoTiff? [img[/img]
-
В openMVG_main_geodesy_registration_to_gps_position я сразу запрограммировал на разворот в соответствии с Север-Югом, я брал самую западную GPS точку съемки и самую восточную, рассчитывал угол линии между ними и на этот же угол доворачивал SFM модель 2 постами выше ортофото и ссылка на Яндекс-карты, там видно что развернуто верно. Т.е. в моем случае нужен только масштаб. Верность geoTiff проверяю в gdalinfo и в QGIS, в последней сразу видно изменение координат под курсором. Но до конца у меня пока не получилось, координаты косячные в QGIS. Ну и определением UTM зоны остается вопрос, поиском ничего пока не нашел. Я на гео-форуме темку создал, но геологи ничего толкового не сказали ))) http://gis-lab.info/forum/viewtopic.php?t=23007 Потом через API буду пробовать XYZ сетку подсовывать чтоб карта высот получилась. Update WidthResolution = MapWidth/pixelWidth; HeightResolution = MapHeight/pixelHeight; double adfGeoTransform[6] = { TopLeftX2, WidthResolution2, 0, TopLeftY2, 0, -HeightResolution }; Вот так работает, QGIS расстояния правильно измеряет, совпадает с Яндекс-картами. MapWidth, MapHeight в метрах.
-
Вот примерный код tiff -> geoTiff . Единственно не понятно как определить UTM зону и как размер ортофото на местности допустим 200х200м добавить к UTM. Сам UTM в метрах, но там есть какой-то масштабный коэффициент 0.9996. string pszFilename("Scene_dense_mesh_texture_orthomap.tif"); GDALDataset *poSrcDS; GDALAllRegister(); poSrcDS = (GDALDataset *)GDALOpen(pszFilename.c_str(), GA_ReadOnly); ..... double adfGeoTransform[6] = { TopLeftX, WidthResolution, 0, TopLeftY, 0, HeightResolution }; const char *pszFormat = "GTiff"; GDALDriver *poDriver; GDALDataset *dstDataset; GDALAllRegister(); poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat); dstDataset = poDriver->CreateCopy("Scene_dense_mesh_texture_orthomap_gdal2.tif", poSrcDS, false, NULL, NULL, NULL); OGRSpatialReference geographicRef; geographicRef.SetWellKnownGeogCS("WGS84"); // standard WGS84 coordinate system geographicRef.SetUTM( 37, TRUE ); char *pszDstWkt; geographicRef.exportToWkt(&pszDstWkt); dstDataset->SetProjection(pszDstWkt); cout << pszDstWkt; GDALSetGeoTransform(dstDataset, adfGeoTransform); if (dstDataset != NULL) GDALClose((GDALDatasetH)dstDataset); if (poSrcDS != NULL) GDALClose((GDALDatasetH)dstDataset);
-
Я OpenDroneMap не собирал, т.к. на Винде пишу. А будет ортофото без gps инфы делать сложно сказать, т.к. точки GPS дают плоскость в пространстве от которой можно плясать. Я ортофото сам закодил, вначале ищу gps точки с равной высотой, потом эти же точки, но полученные через SFM, апроксимирую плоскостью, потом нахожу матрицу вращения которая развернет эту плоскость перпендикулярно оси Z, и после openMVS делает хорошее ортофото, также рассчитываю GPS координаты углов картинки. По идее картинку с координатами углов нужно всунуть в GDAL и получить geoTiff. Но как это сделать конкретно я до сих пор не асилил, в GDAL столько параметров и координат что черт ногу сломит. Такое ортофото пирамиды из первого поста в этой теме, Яндекс-карта https://yandex.ru/maps/?ll=37.066042%2C55.783674&z=17&l=sat%2Cskl
-
По качеству будет явно хуже. Чуть выше кривоватое ортофото произв.базы 30000х25000 точек, при увеличении можно надпись на капоте легковушки рассмотреть, в плотном облаке эта надпись непонятное пятнышко. Интересно что Pix4D все надписи сильно мажет в отличие от MVS. Еще интересно посмотреть как реализован алгоритм ортофото, там ведь кривизну Земли надо учитывать.