Перейти к содержимому
Compvision.ru

fotomer

Пользователи
  • Количество публикаций

    79
  • Зарегистрирован

  • Посещение

  • Days Won

    13

fotomer last won the day on October 4

fotomer had the most liked content!

Репутация

12 Бывалый

О fotomer

  • Звание
    Эксперт

Profile Information

  • Пол
    Мужской
  • Расположение
    Москва
  1. Вот примерный вид картинок geoTiff, скриншоты из QGIS, карта OSM standart, видно что привязанные картинки совпадают с рельефом местности, на первой картинке дорожки, на второй линия забора и граница участка, на третьей река.
  2. В 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 в метрах.
  3. Вот примерный код 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);
  4. Я 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
  5. По качеству будет явно хуже. Чуть выше кривоватое ортофото произв.базы 30000х25000 точек, при увеличении можно надпись на капоте легковушки рассмотреть, в плотном облаке эта надпись непонятное пятнышко. Интересно что Pix4D все надписи сильно мажет в отличие от MVS. Еще интересно посмотреть как реализован алгоритм ортофото, там ведь кривизну Земли надо учитывать.
  6. Продолжаю копаться в ортофото. В openMVG пересчет координат из локальных в глобальные делается просто, берутся центры снимков локальные и глобальные из EXIF и передаются в Eigen::umeyama. Функция высчитывает R, T и S между подобными облаками точек. Пробовал на нескольких полетах, но точного вида сверху ни разу не вышло. Придется вручную считать нормаль, что-то типа перепендикулярная плоскость к высотам gps точек съемки.
  7. OpenMVG по GPS координатам может рассчитать масштаб, вращение и перенос точек для перевода в коорд. ECEF. Но координату ECEF типа 2868760.9609218323603272 нельзя передать в OpenMVS т.к. там используется тип float(всего 8 digits), а переделать на double там не вдруг. Для эксперимента я попробовал пересчитать сетку только с масштабом и вращением, без переноса т.к. перенос дает эти значащие 2868760. Но нормаль получается чуть наклоненной к плоскости и orthophoto получается как бы чуть сбоку, а не ровно сверху. По идее можно уже конечную сетку с текстурой пересчитать, но сохранится ли при этом наложение текстуры не известно. nOrthoMapResolution это размер в пикселях ортофото картинки. По идее нормаль можно посчитать самим, с учетом высоты снимков получить осредненную плоскость. Но если сделать нормальный ортофото, то я до конца так и не понимаю как из него geoTiff сделать. Не в курсе, в geoTiff пиксели по высоте привязаны? Хм, а как они будут делать оротофото если у них только разреженное облако? OpenDroneMap говорят сетку плохую делает и движек OpenSFM вроде похуже, иногда не собирает модели, OpenMVG типа стабильнее. DroneMap каша из Питоновских скриптов и exe, не удобно в отладке. Еще OpenMVS по идее надо переписать в один exe т.к. при сохранении к примеру 50млн точек и последующей загрузке в другом exe тратится масса времени. З.Ы. Производственная база на ортофото, видно что чуть сбоку.
  8. OpenMVG генерит только разреженное облако точек и все. Также может импортировать это облако точек в разные форматы, в т.ч. и для OpenMVS . OpenMVS уже делает облако точек более плотным, делает по нему сетку и накладывает текстуру. При накладывании текстуры есть флажок сделать ортофото, но картинку странную выдает, вроде и вид сверху, но очень разреженный. Это вид производственно базы сверху, но только почему-то контуры зданий, попробовал поиграться настройками положения камеры, не помогло. Точно, ECEF. http://openmvg.readthedocs.io/en/latest/software/Geodesy/geodesy/ Но ECEF по идее можно в любую координату пересчитать. GDAL может сразу сетку всасывать https://gis.stackexchange.com/questions/121903/how-to-create-a-raster-tiff-dem-heightmap-from-a-mesh-of-xyz-points правда не ясно всосет ли GDAL текстуру. Или второй путь пытаться привязать ортофото, но тоже много непонятного. Надо держать друг друга в курсе у кого что получится ибо инфы очень мало по этой теме. Еще такая книжка есть Westra E. - Python Geospatial Development, Third Edition 2016.
  9. Да вот сам бы хотел узнать, текстурированная сетка хорошая получается, а с geoTiff как в стену уперся. Вот есть кое что https://gis.stackexchange.com/questions/121903/how-to-create-a-raster-tiff-dem-heightmap-from-a-mesh-of-xyz-points Сейчас в OpenMVS в проекте TextureMesh увидел флаг "orthographic-image", вроде оно. Но проблема, как писал выше, что OpenMVS не хочет принимать для расчета из OpenMvg гео-привязанные точки, вернее принимает, но сетку строит совсем плохую. Вот для примера сетка с пересчитанными координатами в gps, видимо OpenMVS эти миллионые xyz не нравятся. Можно конечно пересчитывать в gps уже готовую текстурированную сетку, но там уже надо разбираться как текстуры к этому отнесутся. ply format ascii 1.0 element vertex 18468 property double x property double y property double z property uchar red property uchar green property uchar blue end_header 2868760.9609218323603272 2166603.1702711693942547 5250982.6711078854277730 102 92 57 2868748.8379191830754280 2166593.4763295799493790 5250993.8941893931478262 113 93 60 2868680.0388088696636260 2166557.1158213810995221 5251048.8029191521927714 76 74 35 2868724.3026116066612303 2166636.2629922572523355 5250991.0214411308988929 136 123 81 2868657.8424244783818722 2166570.4558626487851143 5251056.5254463842138648 82 89 47 2868691.3514573448337615 2166634.9753469135612249 5251011.7093280144035816 184 155 123
  10. В OpenMvg есть проект openMVG_main_geodesy_registration_to_gps_position, она может все точки пересчитывать или, сейчас посмотрел код, ищет bound. А что потом с этой границей делать, в Affine GeoTransform подставлять? Я пересчитывал все точки, единственно потом OpenMvs не корректно работает с пересчитанными точками, т.е. изначально координаты около единицы и сетка получается хорошей, после gps пересчета координаты становятся по x,y,z около 5 млн, и сетка получается щербатой. Еще если будешь в OpenMvs считать сетку, ставь параметр min-point-distance вместо дефолтных 2 -> 10. Сетки практически не отличается, а время расчета в 5 раз меньше. Скачал tif по ссылке, открыл програмкой PhotoMe, которая все теги смотрит, что-то инфы о GPS не видно, или вместе с geoTiff еще файлики с привязкой лежат?
  11. gdal вроде только для работы с растрами, к примеру OpenDroneMap сам генерит картинку и только потом в gdal подсовывает для создания geoTiff. P.S. Вот еще картинка, над одной базой полетали
  12. Есть текстурированная сетка, как на картинке, координаты сетки отмасштабированны и привязаны в соответcтвии с GPS, т.е. openMVG извлекает GPS координаты из картинок, расчитывает масштаб, поворот, перенос для сетки и умножает все координаты на эти величины. Нужно из этой сетки сделать geoTiff, но как это сделать совершенно не понятно, поиск ничего особо не дает. OpenDroneMap делает перевод через какие-то свои хитрые форматы и использовать их затруднительно. Может у кого есть идеи как сделать geoTiff? [img[/img]
  13. Сейчас как раз компилирую PCL 1.7.2 и вылезла эта ошибка, хотя вроде все х64. Оказалось везде в в настройках проекта Properties -> Linker ->Command Line -> Additional optiorns стоит /machine:X86. Приходится все вручную вычищать.
  14. stereo 3d reconstruction

    Сравнение https://habrahabr.ru/post/320766/ orthophoto не умеет, но коорд. GPS умеет всасывать. Сейчас хочу реализовать orthophoto, смотрю как в openDroneMap реализовано. Есть кстати мысли как orthophoto прикрутить? openMVG сохраняет только в ply. Из экспорта есть файлик exportCameraFrustum но фик знает что это такое. З.Ы. Сфоткал коробку на столе и загрузил в pix4D. Так вот openMVS явно лучше текстуру сделал, все буквы на коробке читаются, а pix4D буквы размазал.
  15. Видимо у вас операционная система х86 и пытаетесь запустить модуль opencv х64. По хорошему операционку надо переставлять т.к. для работы с картинками надо много памяти или запускать opencv х32 и в настройках проекта ставить флажок "использовать длинные адреса".
×