Проект реконструкції поверхні MURI

Оригінал: math.tamu.edu

Документація аплету браузера

Загальні відомості

Мета цього документа – описати використання та варіанти програм для реконструкції та порівняння поверхонь із даних, схожих на дані хмарного середовища. Програми можна завантажити Тут.

Робочий процес

Як правило, обробка даних хмарного середовища виконується в наступному порядку, де не всі ці кроки необхідні або розумні для всіх вхідних даних:

  • Перетворення формату
  • Попередня обробка
  • Реконструкція поверхні
  • Подальша обробка
  • Перегляд

Програми

WizardGUI

Ця програма проведе вас через усі етапи відновлення поверхні та порівняння в графічному інтерфейсі. Повну документацію щодо використання майстра ви знайдете тут.

Форматування

StmToPts

Ця програма перетворює ‘.stm’ файл у файл ‘.pts’. Програма приймає аргументи командного рядка у вигляді:

stmtopts <height map file> [scale]

Спочатку потрібно вказати файл карти висоти у форматі ‘.stm’, а за бажанням – масштаб. Файл ‘.stm’ визначає висоту кожної комірки у 2D-сітці як 16-бітове ціле число, і ці значення діляться на шкалу. Кожна комірка в сітці вважається однією одиницею збоку.

IhmToPts

Ця програма перетворює ‘.ihm’файл у файл ‘.pts’. Програма приймає аргументи командного рядка у вигляді:

ihmtopts <ihm file> [scale]

Як і перетворення StmToPts, масштаб можна вказати за бажанням.

XyzToPts

Кожна точка у файлі ‘.xyz’ перетворюється в точку у файлі ‘.pts’. Норма в кожній точці невизначена. Вихідний файл буде мати те ж ім’я, що і вхідний файл, за винятком того, що розширення «.pre» додається. Файл ‘.pre’ – це те саме, що файл ‘.pts’, але для зручності робочого циклу він називається по-різному. Використання наступне:

xyztopts <xyz file>

XyzToPtsView

Кожна точка у файлі ‘.xyz’ перетворюється в точку у файлі ‘.pts’. Нормальна норма в кожній точці встановлюється такою, що вказує на положення камери, вказане індексом, у файл траєкторії. Файл траєкторії повинен мати те саме ім’я файлу та систему координат, що і файл .xyz. Ім’я файлу має бути вказано без розширення. Використання наступне:

xyztoptsveiw <xyz file without extension>

Попередня обробка

FixBox Shared

Надається будь-яка кількість вхідних наборів даних, і обмежувальне поле всіх наборів даних, яке буде встановлено до обмежувального вікна об’єднання точок з наборів. Вхідні файли перезаписуються. Використання полягає в наступному:

Fixbboxshared [.pts [.pts […]]]

SortPoints

Ця програма обчислює приблизні норми для файлів ‘.pts’ вздовж осі z. Якщо найдовша вісь не є віссю z, модель буде повернуто так, щоб найдовшою віссю була вісь z. Нічого надзвичайного не робиться, лише обертання на 90 градусів. Щоб використовувати програму, надайте вхідний файл як аргумент, а за бажанням, надайте ім’я вихідного файлу як другий аргумент. Якщо не вказано ім’я вихідного файлу, вхідний файл буде замінено. Використання наступне:

sortpoints <infile> [outfile] 

CalcNorms

Ця програма обчислює приблизні норми для файлів .pts та .pre, створених без інформації про траєкторію. Це робиться шляхом поділу відсканованого об’єму на сітку, припускаючи, що це місце дії. А саме, що є над і під відсканованими даними. Простір, що лежить під звисом, потенційно може бути або повітрям, або брудом. Усі відомі області поширюють свої значення заповнених або незаповнених у всіх невизначених сусідів, які не містять балів, поки всі області не будуть визначені як заповненими, так і незаповненими.

Якщо область заповнена, їй присвоюється значення 1, якщо вона порожня, їй присвоюється значення -1, а якщо вона містить точки, їй дається значення 0. Градієнт цієї функції грубо наближається до нормалей пунктів. Нормаллю кожної точки встановлено найкращу площину через місцеве сусідство точок, а напрямок нормалі площини (всередині або поза) визначається з градієнта функції всередині-зовні.

Використання наступне:

Параметри можуть бути передані в командний рядок спочатку вказуючи ім’я параметра, який слід змінити за своєю вартістю.

pts [.pre]

res [integer]

res_x [integer]

res_y [integer]

res_z [integer]

fillgaps (t|f)

. Pts – визначає файл вхідної точки для використання

. Res – роздільна здатність сітки в напрямках x, y, z

. Res_x – роздільна здатність сітки в напрямку х

. Res_y – роздільна здатність сітки в напрямку у

. Res_z – роздільна здатність сітки в напрямку z

. Fillgaps – якщо встановлено значення true, точки додаються у координати x, y, де немає вхідних даних.

CalcNormsView

Ця програма обчислює приблизні норми для файлів .pts і .pre, які були створені з інформацією про траєкторію. Інформація про траєкторію просто вказує місце, з якого сканувалася кожна точка. Нормаллю кожної точки встановлюється найкраща площина через місцеве сусідство точок, а напрямок нормалі площини (входить або виходить) визначається від напрямку до камери. Точку не можна сканувати зсередини об’єкта, тому нормаль повинна спрямовуватися у напрямку камери.

Параметри можуть бути передані в командний рядок спочатку вказуючи ім’я параметра, який слід змінити за своєю вартістю.

pts [.pre]

res [integer]

res_x [integer]

res_y [integer]

res_z [integer]

fillgaps (t|f)

extend_avg (t|f)

floodfill (t|f)

thin_struct (t|f)

. Pts – визначає файл вхідної точки для використання

. Res – роздільна здатність сітки в напрямках x, y, z

. Res_x – роздільна здатність сітки в напрямку х

.Res_y – роздільна здатність сітки в напрямку у

. Res_z – роздільна здатність сітки в напрямку z

. Fillgaps – якщо встановлено значення true, точки додаються у координати x, y, де немає вхідних даних.

. Extended_avg – коли заповнення пропусків істинне, то точки, додані для землі, додаються на висоті, яка дорівнює середній висоті оточуючих точок.

.  Floodfill – інший метод визначення того, які ділянки місцевості знаходяться всередині або зовні, що рідко буває кращим, ніж метод за замовчуванням.

. Thin_struct – тонкі конструкції, такі як огорожі та лінії електропередач, потовщуються, намагаючись зберегти дрібні деталі, які часто втрачаються під час реконструкції поверхні. 

FilterPoints

Точки, які не знаходяться поблизу інших точок або нормалі яких сильно відрізняються від оточуючих точок, видаляються з набору даних. Вхідний файл повинен мати точки в упорядкованому порядку, оскільки програма працює без ядра. Відфільтрований вихідний файл має те ж ім’я, що і вхідний файл, за винятком того, що розширення «.filter» додається. Використання полягає в наступному:

Параметри можуть бути передані в командний рядок спочатку вказуючи ім’я параметра, який слід змінити за своїм значенням.

pts [.pts]

depth [integer]

marks [integer]

dist_dev [float]

angle_dev [float]

. pts – відсортований набір вхідних даних

. depth – роздільна здатність основної сітки, на якій проводяться обчислення, становить 2 d x2 d x2 d комірок збоку, де d – глибина.

. marks – для кожної сусідньої комірки, яка не має точок, ставиться відмітка. Позначка також дається для кожної комірки, що перевищує допустиме відхилення відстані від площини або різницю нормалі до площини, яка відповідає сусіднім точкам. Параметр позначки встановлює максимальну кількість позначок, яку може отримати точка до її видалення.

. dist_dev – якщо точка перевищує вказане відхилення відстані від місцевої площини щодо інших точок в околиці, точка отримує позначку.

. angle_dev – якщо точка більша за вказане відхилення в нормалі від нормалі місцевої площини, точка отримує позначку.

FilterOutliers

Параметри можуть бути передані в командний рядок спочатку вказуючи ім’я параметра, який слід змінити за своїм значенням.

pts [.pre]

res [integer]

res_x [integer]

res_y [integer]

res_z [integer]

ratio [float]

.Pts – визначає файл вхідної точки для використання

. Res – роздільна здатність сітки в напрямках x, y, z

. Res_x – роздільна здатність сітки в напрямку х

. Res_y – роздільна здатність сітки в напрямку у

. Res_z – роздільна здатність сітки в напрямку z

. Ratio – якщо щільність точки біля точки нижче співвідношення, помноженої на середню щільність, то точка видаляється.

LOP – локально оптимальна проекція

Ця програма виконує попередню обробку WaveletPipeRecon. Вона використовує оператор локальної оптимальної проекції [1] для проектування шумних точок як фільтрації шуму та регулювання розподілу точок сканованої хмари точок. Програма використовує реалізацію на основі Octree як оптимізацію для мінімізації витрат часу роботи оригінального алгоритму. Посилання на LOP: [1] Lipman, Y., Cohen-Or, D., Levin, D., and Tal-Ezer, H. 2007. Безпараметрична проекція для реконструкції геометрії. ACM Trans. Графік. 26, 3 (липень 2007 р.), 22.

Параметри можуть бути передані в командний рядок, попередньо вказавши ім’я параметра, який слід змінити, а потім його значення. 

pts [.pts]

pts2 [.pts]

mu [float]

h [float]

k [int]

r [float]

. pts – вихідний набір вхідних даних.

. pts2 – довільний набір даних, який буде відібраний відповідно до частоти дискретизації, щоб сформувати набір припущень, що проектується на вихідний набір вхідних даних.

. mu – параметр відштовхування, діапазон якого становить [0, 1/2), детально див. [1].

. h – радіус опори гауссової вагової функції, що використовується [1].

. k – кількість ітерацій алгоритму фіксованої точки для обчислення проекції.

. r – частота дискретизації для вибірки з довільного набору для формування набору здогадок.

SurfFitFill

Програма виконує як окрему процедуру заповнення більшої кількості точок у наборі вхідних даних. Спочатку він ділить набір даних на комірки відповідно до роздільної здатності, наданої користувачем, потім підганяє точки кожної комірки до площини і додає більше точок на площину. Ця програма виявляється дуже корисною для оцінки пропущених деталей набору вхідних даних через розріджене сканування, наприклад, набір даних підземного переходу. 

Для компіляції коду потрібні наступні зовнішні бібліотеки: 

1. BLAS

2. LAPACK

3. FLENS (АC ++ інтерфейс до BLAS і LAPACK) 

Ми рекомендуємо скомпілювати код під системою на базі Linux, щоб полегшити встановлення необхідних бібліотек вище.

Параметри можуть бути передані в командний рядок, попередньо вказавши ім’я параметра, який слід змінити, а потім його значення. 

pts [.pre]

res [integer]

res_x [integer]

res_y [integer]

res_z [integer]

. pts – визначає файл вхідної точки для використання

. res – роздільна здатність сітки в напрямках x, y, z

. res_x – роздільна здатність сітки в напрямку х

.res_y – роздільна здатність сітки в напрямку у

.res_z – роздільна здатність сітки в напрямку z

Реконструкція поверхні

WaveletPipeRecon

Про те, як користуватися програмою, зверніться до документації за адресою: http://people.cs.tamu.edu/jmanson/programs_wavelet_reconstruct.html

Документацію щодо вихідного коду див. у документації тут

Daub3DCompare

Ця програма виконує реконструкцію поверхні на двох вхідних наборах даних, використовуючи вейвлет-основу Daubechies 4. Симетричну різницю між реконструйованими функціями індикатора можна обчислити, або поверхні можна відновити з кожного набору даних лише на перетині наборів даних. Використання цієї програми подібне до використання програми WaveletPipeRecon. Використання полягає в наступному:

Параметри можуть бути передані в командний рядок спочатку вказуючи ім’я параметра, який слід змінити за своєю вартістю.

pts1 [.pts]

pts2 [.pts]

глибина [N]

to_screen (t | f)

to_file (t | f)

розмиття (t | f)

surf_at_pts (t | f)

surf_at_int (t | f)

shared_pts (t | f)

cmp_thresh (t | f)

cfg [config_file]

Тут описані лише параметри, які відрізняються від параметрів у WaveletPipeRecon:

. Surf_at_int – якщо встановлено значення true, поверхня витягується лише в місцях x, y, які мають точки з обох вхідних наборів даних.

. Shared_pts – якщо встановлено значення true, для виконання реконструкцій використовуються лише точки, що мають однакове розташування x, y в обох наборах вхідних даних.

. Cmp_thresh – якщо встановлено значення true, симетрична різниця між функціями індикатора виконується шляхом взяття симетричної різниці порогових функцій індикатора, де порогове значення означає встановлення значень функції або 0, або 1.

Подальша обробка

SurfDistColor

Відстані між поверхнями обчислюються в кожній вершині. Потім ця інформація про відстань використовується згодом для зафарбовування поверхонь, щоб виділити ділянки, де поверхні не збігаються.

Перегляд

ViewDists

Ця программа використовується для перегляду результатів SurfDistColor для виявлення резервуарів.

ViewPts

Ця програма переглядає файли .pts.

ViewXYZ

Ця програма переглядає файли .xyz.

3dViewer

Ця програма переглядає різні формати поверхні, зокрема ‘.bobj’.

Формати файлів

.pts

Програми відновлення поверхні приймають введення у форматі файлу .pts. Цей двійковий формат – це простий опис набору точок у тривимірному просторі з присвоєними одиницями зовнішніх нормальних векторів. Він складається із заголовка, який має два тривимірних вектори, що описують максимальний та мінімальний обсяги декорації, а потім ціле число, що містить кількість точок у файлі даних. Після заголовка знаходиться список точок, де кожна точка складається з нормалі та положення, які представлені у вигляді тривимірних векторів. Код псевдо-С, що описує формат, наведений нижче:

struct xyz
{
float x, y, z;
};

struct bbox
{
xyz min_corner, max_corner;
};


struct header
{
bbox bounds;
int number_of_points;
};

struct point
{
xyz normal, position;
};

struct pts_file
{
header head;
point points[];
};

.stm

Файли STM – це карти висоти, які визначають одне значення висоти для кожної точки в звичайній прямокутній 2D-сітці. Більш детальний опис цього формату доступний на веб-сайті MURI у розділі “формати”.

.ihm

Файл .ihm – це проста карта місцевості (файл .stm) з розширеним колонтитулом IMI. Нижній колонтитул необов’язковий і позначається символом “#” без лапок. Хеш позначає решту поточного рядка як коментар, який потрібно пропустити під час інтерпретації (тобто перетворення). Більш детальний опис цього формату доступний тут.

.xyz

Файли XYZ – це файли ASCII, які містять координати xyz і рівень сигналу зворотного сигналу точок, по одній точці на рядок.

.xyzrgba, .traj

Формат XYZRGBA подібний до XYZ, з тією різницею, що перед кожним рядком передує ціле число. Ці індекси посилаються на файл із суфіксом .traj, який для кожного індексу містить позицію xyz місця розташування датчика, з якого були записані точки з цим індексом. Це розташування датчика часто корисне для визначення орієнтації поверхні, нормальної до точки (вона завжди повинна спрямовуватиcя в межах 90 градусів від напрямку камери). Як випливає з назви, файли XYZRGBA додатково визначають колір RGBA сканованої поверхні в кожній точці. RGBA – це зображення кольору, яке визначає червоний, зелений та синій компоненти та непрозорість поверхні.

Документація аплету браузера

Загальні відомості

Це онлайн-документація аплету Jviewer та графічний інтерфейс для його використання, який переглядає дані хмарних точок із середовища браузера. Цей графічний інтерфейс може бути використаний для обробки даних хмарних точок без встановлення або компіляції програми та її залежностей на вашому комп’ютері. Єдиним необхідним компонентом для вас, як користувача, є оновлена інсталяція Java для вашої операційної системи. Якщо у вас цього немає, вам буде запропоновано встановити його. Якщо це так, будь ласка, відвідайте http://www.java.com та встановіть останню версію для своєї операційної системи.

Робочий процес

Як правило, процес перегляду даних хмари точок через аплет є таким:

  • Введення графічного інтерфейсу користувача
  • Завантаження файлу
  • Перетворення формату
  • Попередня обробка
  • Реконструкція поверхні
  • Перегляд

Деякі розділи такі самі, як описано вище, і не будуть тут повторюватися

Графічний інтерфейс

Графічний користувальницький інтерфейс і початок процесу розташовані тут, мета графічного інтерфейсу така ж, як описана вище у програмі WizardGUI. Це дозволяє користувачеві вказати всі параметри, які вони хотіли б використовувати під час запуску сценарію для генерації своїх візуалізованих даних.

Для отримання детальних відомостей про графічний інтерфейс перейдіть за цим посиланням: Особливості графічного інтерфейсу

Програма

Єдиною новою програмою (крім розглянутих вище) є аплет Jviewer. Аплет JAR викликається разом з одним параметром для функціонування:

файл – назва завантаженої хмари точок (наприклад, african_statue.pts)

Jviewer

Ця програма є Java-аплетом, який переводить хмару точок у Java 3D та візуалізує її у вікні.

Завантаження файлу

Після введення параметрів у графічному інтерфейсі завантажується файл хмари точок зазначеного типу. Це робиться безпосередньо під самим графічним інтерфейсом. Поточне обмеження максимального розміру файлу для завантаження становить 10 МБ, як зазначено в графічному інтерфейсі користувача.

Перетворення формату

Це описано вище, і за необхідності використовуються ті самі програми.

Попередня обробка

Це описано вище, і за необхідності використовуються ті самі програми.

Реконструкція поверхні

Це описано вище, і за необхідності використовуються ті самі програми.

Перегляд

Це досягається за допомогою програми Jviewer, яка виконує те саме завдання, що і 3dViewer, описане вище, через вікно браузера.

Приватні файли

коефіцієнт_фільтрації.pdf

мінімізація.pdf

Нові дані (червень 2009 р.) У форматі PDF

Список літератури

1. Джосія Менсон, Гергана Петрова, Скотт Шефер.”Потокове відновлення поверхні за допомогою вейвлетів.”Симпозіум з обробки геометрії 2008.<http://students.cs.tamu.edu/jmanson/wavelet_reconstruct.pdf>.