Forum

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - HongSe

Pages: [1]
1
Отправил ссылку для скачивания через личное сообщение.

2
Раскладка текстурного атласа

3
Результат не изменился. Вариант 1 хуже.

З.Ы. В предыдущем посте с координатами точек внес корректировку по опечатке в тексте.

4
Режимы построения полигональной модели и текстуры.

5
Прошу прощения за задержку с ответом.
Три точки являются строго узлами прямоугольника.
Вариант 1. Точка P1 - левый нижний угол, P2 - правый нижний угол, P3 - правый верхний угол.
Вариант 2. Точка P1 - левый верхний угол, P2 - левый нижний угол, P3 - правый нижний угол.

Исходные точки и матрицы поворота для каждого случая.
Примечание: Коодинаты Z точек после пересчета в СК chunk-а приравниваются координате Z точки центра исходного chunk-а.

Вариант 1
Исходные точки в географической СК:
P1: 335944.272312,399404.287080,459.412
P2: 335982.751667,399418.103683,458.177
P3: 335971.78239234,399448.65320473,459.728
Эти же точки в системе координат chunk-а:
---P1_chunk: Vector([0.8653454322193284, 5.930116143339546, -8.003445653266768])
---P2_chunk: Vector([1.4807616356702056, 3.1243880709880614, -8.003445653266768])
---P3_chunk: Vector([3.828758996009128, 3.577138339402154, -8.003445653266768])
---Matrix_rot_new:
Matrix([[0.21422909856979924, 0.9766863342261944, 0.013773084686069229],
            [-0.9266238938859724, 0.1899008007324427, 0.31916707763880925],
            [0.3089887580569382, -0.08113734469834596, 0.9475983741489495]])

Вариант 2
Исходные точки в географической СК:
P1: 335971.78239234,399448.65320473,459.728 - опечатка
P1: 335933.30303734,399434.83660173,459.412
P2: 335944.272312,399404.287080,459.412
P3: 335982.751667,399418.103683,458.177
Эти же точки в системе координат chunk-а:
---P1_chunk: Vector([3.2133371863747016, 6.382863208986237, -8.003445653266768])
---P2_chunk: Vector([0.8653454322193284, 5.930116143339546, -8.003445653266768])
---P3_chunk: Vector([1.4807616356702056, 3.1243880709880614, -8.003445653266768])
---Matrix_rot_new:
Matrix([[-0.9818193334512496, 0.18931745455602986, 0.013773084686069241],
            [-0.1751141363914599, -0.9310406629956549, 0.3191670776388095],
            [0.07325186480368466, 0.31095254559667174, 0.9475983741489504]])

Так же прилагаю результаты в виде текстурированных полигональных моделей.
Качество модели для Варианта 1 заметно хуже.

6
Улучшая и оптимизируя скрипт по ориентации boundary box при помощи координат трех точек, заметил одну особенность, касающуюся boundary box.
Например, имеются координаты трех точек P1, P2, P3 образующие вершины прямоугольника в плане. Я могу ориентировать boundary box двумя способами: способ 1 - продольная сторона по вектору P1P2; способ 2 - продольная сторона по вектору P2P3. В обоих случаях получается вроде бы одинаковый boundary box. Но в одном из случаев происходит некорректное построение полигональной модели (по цвету) и текстур к ней. Стоит применить другой способ, переориентировав продольную сторону ошибка исчезает.
1) В чем может быть причина? Имеется какое то правило по ориентированию boundary box?
2) На параллелепипеде, ограничивающем boundary box на экране, у верхней и нижней граней имеются короткие вертикальные отрезки. Что они означают?

7
Даже в "рукопашную" работать с shape в виде точек оказалось очень удобно. Точкам можно присваивать уникальные имена и "распихивать" их по слоям, перетаскивать их курсором с места на место и т.д. И визуально хорошо видно, и точки хранятся в файле проекта в организованном виде. И, соответственно, доступ к ним из скрипта организовать тоже проще.
З.Ы. Просматривая темы, в которых упоминаются shape, наткнулся на интересную тему (http://www.agisoft.com/forum/index.php?topic=8060.msg38554), перекликающуюся с моей задачей по ориентации boundary box. С точки зрения лаконичности реализации скрипта очень интересно, у меня же получилось топорно, по рабоче-крестьянски  :)

8
Спасибо за идею с шейпами. Подумаю, что из этого можно сделать.
В моем случае удобнее всего было бы интерактивно указывать точки во время выполнения скрипта. Т.к. задача состоит в том, чтобы из общей модели местности (городская среда, квадрат 250х250м) "выцепить" отдельные фрагменты (отдельные здания и объекты) для их более детальной проработки на этапе создания плотного облака точек и полигональной модели с текстурами. Я написал скрипт, который по трем точкам (P1, P2, P3): 1) ориентирует chunk's boundary box так, что P1 и P2 задают продольную ось, а P3 - направление поперечной оси; 2) расстояние между P1 и P2 является длиной, а нормаль из P3 на вектор P1P2 - шириной chunk's boundary box. И теперь ищу как наиболее оптимально обойти ограничение по интерактивному указанию нужных точек. До идеи с шейпами остановился на том, чтобы, для всех интересующих меня объектов, снять нужные точки Линейкой, "скопипастить" из Консоли в текстовый редактор (Notepad++), привести в нужную структуру и потом считывать по номеру (или другому идентификатору) записи уже при выполнении скрипта. Номер будет задаваться в диалоговом окне, которое инициируется при запуске скрипта при помощи виджетов.
З.Ы. В силу своих, пока еще, ограниченных знаний и небольшого опыта как в фотограмметрии, так и в программировании на Python, приходится обращаться за советами к специалистам. Спасибо за помощь )

9
Понятно. Тогда сделаю так, сниму Линейкой координаты точек в консоль, скопирую из консоли в текстовый файл, и из скрипта, базовыми средствами python-а для работы с файлами, считаю координаты из текстового файла в скрипт для обработки.

10
На панели инструментов есть команда Линейка, с помощью которой можно получать координаты точек. Сами координаты можно "выловить" в Консоли и скопипастить в скрипт.
Вопрос: есть ли возможность вызывать из скрипта Линейку, чтобы получать координаты в момент выполнения скрипта?

11

Кстати, как потом объединить полученные модели?

Объединить chank's через "Обработка" -> "Объединить блоки..." включив опцию "Объединить модели" не получится?

12
Вопрос по матрице chunk.region.rot снимается. Разобрался. Как я понял, эта матрица результат последовательного произведения трех матриц поворота относительно осей X, Y, Z системы координат chunk-а. Получилось "достать" направляющие углы поворота region-а через элемент [0,2] матрицы, содержащей sin угла поворота относительно оси Y.

13
Алексей, если можно, помогите разобраться с матрицей chunk.region.rot.
Какие элементы в ней за что отвечают? Например, мне нужно получить поворот вокруг одной из осей региона на определенный угол.

14
Спасибо!
Разбираюсь со скриптом, позволяющим ориентировать Boundary box chunk-а по осям системы координат (СК).
В скрипте есть строчки:
   M_chunk = chunk.transform.matrix
   v_t = M_chunk.mulp(PhotoScan.Vector([0, 0, 0]))
   m = chunk.crs.localframe(v_t)
В первой строке получаем матрицу преобразования между мировой СК и СК chunk-а.
Во второй строке переменной v_t, путем умножения матрицы преобразования chunk.transform.matrix на нормализованный вектор PhotoScan.Vector([0, 0, 0]), возвращается вектор положения начала СК chunk-а в мировой системе координат.
В третьей строке переменной m возвращается так же матрица преобразования, но уже из геоцетрической СК в локальную СК.
Читаю описание в руководстве по API.
Для первой строки:
   Transformation between chunk and world coordinates systems.
Для третьей строки:
   Returns 4x4 transformation matrix to LSE coordinates at the given point.
      Parameters point (Vector) – Coordinates of the origin in the geocentric coordinates.
      Returns Transformation from geocentric coordinates to local coordinates.
Насколько я понял из руководства по API, есть четыре СК: мировая, chunk-а, локальная, геоцетрическая и географическая.
И вот с этими СК прошу помочь разобраться. Какая между ними взаимосвязь? Мировая СК - это геоцентрическая СК, а локальная СК - это СК chunk-а?
Например, у меня есть построенное облако точек с привязкой к системе координат MSK. Как мне перейти от координат какой-либо точки в MKS, полученной, например, путем измерения командой "Линейка",  к координатам этой точки в любой другой из этих координат? Или, например, получить координаты центра Boundary box-а chunk-а в MSK?

15
Не могу понять зачем после единицы стоит точка?
R = R * (1. / s)
И в инете не могу найти.

Pages: [1]