Zastanawiasz się, czy można przenieść rzeczywisty obiekt do pliku cyfrowego? Taka technologia jest dostępna, ale większość z nas nie ma pod ręką zaawansowanych skanerów 3D, które potrafią stworzyć cyfrową rekonstrukcję geometrii obiektu. Nie wspominając o tym, że niektóre z nich mogą być za duże dla tradycyjnego skanera 3D. Jest jednak inny, dużo tańszy sposób na tworzenie modeli 3D z prawdziwych obiektów.

Czym jest fotogrametria?

Fotogrametria (lub SFM – Structure From Motion) jest procesem obliczającym trójwymiarowe koordynaty punktów powierzchni rzeczywistego obiektu na podstawie fotografii wykonywanych pod różnymi kątami. A tak przynajmniej brzmi nadmiernie uproszczona definicja. Możesz wykonać kilka fotografii obiektu ze wszystkich możliwych kątów, następnie użyć zdjęć jako danych wejściowych do specjalistycznego oprogramowania. Oprogramowanie będzie porównywać fotografie pod kątem podobnych obszarów starając się „zgadnąć” miejsca, z których zostały wykonane ujęcia. Znając położenie aparatu i jego kierunek, tworzy punkty 3D odpowiadające dwu-wymiarowym danym z obrazka (czyli po prostu pikselom). Idealnie byłoby otrzymać gotową siatkę 3D jako wynik tej operacji, ale często okazuje się, że lepsze rezultaty da samodzielna rekonstrukcja punktów.

Oprogramowanie

Lista dostępnego oprogramowania do fotogrametrii jest dość długa. Problem w tym, że większość programów jest bardzo kosztowna lub ich darmowe wersje są bardzo okrojone. Niektóre programy oferują obliczenia w chmurze, co bywa przydatne, ale zwiększa koszt.

Staraliśmy się wybrać najlepsze, darmowe oprogramowanie:

  • Colmap (Win/Mac/Linux) – użyjemy go w tym artykule
  • 3DF Zephyr (Win) – darmowy z limitem 50 zdjęć
  • Visual SFM (Win/Mac/Linux)

Będziemy również potrzebować jakiegoś programu do obróbki danych wyjściowych. Wybór jest dość prosty – Meshlab.
Przetwarzanie takich danych jest dość zasobożerne i próba wykonania tego na starym laptopie może okazać się niewykonalna ze względu na niezwykle długi czas obróbki. Wiele aplikacji polega również na rdzeniach NVIDIA CUDA (np. Colmap) i nie uda się ich odpalić na kartach graficznych AMD.

Fotografowanie pod fotogrametrię

Będziesz oczywiście potrzebować aparatu. Aparat w smartfonie wystarczy, ale lepiej użyć lustrzanki. Jeśli będziesz jej używać, ustaw przysłonę na co najmniej 7-8, aby zwiększyć głębię ostrości.

Potrzebujesz co najmniej 20 fotografii. Podczas naszych testów często robiliśmy 50-80 zdjęć, aby uchwycić każdy szczegół. Pamiętaj, że niektóre obrazki mogą być odrzucone, jeśli program nie znajdzie odpowiedniej ilości podobieństw do innych z puli.

  1. Najlepszą metodą jest poruszanie się wokół obiektu. Szczególnie ważne jest, aby nie przemieszczać obiektu pomiędzy ujęciami.
  2. Nakładaj ujęcia na siebie! Każdy element obiektu powinien być uchwycony na co najmniej 2 zdjęciach. Idealnie jest uchwycić 60-80% obszaru poprzedniego zdjęcia na obecnym.
  3. Unikaj ostrych cieni, użyj światła rozproszonego lub fotografuj na zewnątrz przy pochmurnej pogodzie.
  4. Obiekt powinien zajmować znaczną część każdego zdjęcia.
  5. Unikaj poruszających się obiektów (np. zwierząt, chyba, że śpią).
  6. Unikaj błyszczących lub przezroczystych powierzchni (rozwinięcie poniżej).

Idealnym celem dla fotogrametrii jest chropowata powierzchnia (np. pomnika). Jeśli masz taką możliwość, pokryj połyskliwy (gładki) obiekt drobnym proszkiem (np. mąką), aby zredukować refleksy. Możesz również obkleić błyszczącą powierzchnię taśmą malarską.

Zaawansowani użytkownicy mogą nakręcić film i przekonwertować go w indywidualne klatki. W takim przypadku ustaw duża prędkość migawki (np. 1/80), aby uniknąć rozmyć.

Rekonstruowanie geometrii ze zdjęć

Zalecamy utworzenie folderu, w którym będą znajdować się wszystkie dane pojedynczej rekonstrukcji. Stwórz w nim podfolder o nazwie „Zdjęcia” i umieść je w nim. Przejrzyj zdjęcia i usuń rozmyte. Do rekonstrukcji użyjemy programu Colmap w systemie Windows 10.

  1. Uruchom Colmap z pliku Colmap.bat
  2. Z górnego menu wybierz Reconstruction – Automatic reconstruction
  3. Ustaw folder Workspace – to w nim będą przechowywane pliki rekonstrukcji oraz wynikowa siatka
    • Dla tego celu stwórz nowy folder obok folderu „Zdjęcia”
  4. Ustaw Image folder na stworzony przed chwilą folder Zdjęcia
  5. Parametr „Vocabulary tree” możesz zostawić pusty, ewentualnie ściągnij któryś z tej strony
  6. Zostaw „Data type” jako „Individual images” lub zmień na „Video frames”, jeśli są to klatki wyciągnięte z filmu
  7. Zmień jakość („quality”) na Medium
    • Możesz spróbować jakości na poziomie High, ale z naszych doświadczeń wynika, że Colmap często się zawiesza przy tym ustawieniu
  8. Pozostaw inne ustawienia domyślne i naciśnij Run
  9. Proces może zająć od 5 minut do nieskończoności, w zależności od liczby zdjęć i parametrów Twojego komputera

Po zakończeniu rekonstrukcji pojawi się podgląd obiektu wraz z szacunkowymi pozycjami aparatu.

Ustawienie Colmap i końcowy podgląd zrekonstruowanej sceny

Pliki wyjściowe

Interesują nas dwa pliki wyjściowe z Colmapa: fused.ply oraz meshed.ply. Znajdziesz je w podfolderze folderu Workspace (Workspace/dense/0/). Meshed.ply jest, jak nazwa wskazuje, triangulowaną siatką. Colmap jednak nie jest najlepszy w tworzeniu siatek, ale jeśli chcesz zaoszczędzić sobie trochę pracy, to mimo wszystko nadają się one do użycia. PLY można łatwo przekonwertować na STL używając np. Meshmixera lub Meshlaba. Jednak nie jest dobrym pomysłem próba wydrukowania samej wynikowej siatki. Te tworzone ze skanów 3D lub fotogrametrii zawierają zazwyczaj mnóstwo błędów oraz nie mają płaskiej podstawy, którą moglibyśmy położyć na stole. W artykułach o naprawianiu modeli 3D z błędami oraz przecinaniu modeli znajdziesz rozwiązania tych problemów. Pamiętaj również, że skala zeskanowanego obiektu będzie dość dowolna, więc zmień ją dla własnych potrzeb.

Drugi plik jest dla nas bardziej interesujący. Fused.ply zawiera tak zwaną chmurę punktów. Jest tylko zbiorem punktów w przestrzeni, więc nie ma siatki. Musimy samemu ją stworzyć, co oznacza dodatkową pracę, ale rezultat jest zazwyczaj dużo lepszy.

Tworzenie sitaki z chmury punktów

  1. Otwórz Meshlab, wybierz File – Import Mesh i wybierz plik fused.ply
  2. Pojawi się widok punktów w przestrzeni
  3. Wybierz narzędzie Select vertexes z głównego (górnego) paska narzędzi i zaznacz wszystkie punkty, które chcesz usunąć
    • Narzędzie działa jak zaznaczanie prostokątem – przytrzymaj lewy przycisk myszy podczas przeciągania
    • Możesz nacisnąć i przytrzymać Ctrl, aby dodać więcej punktów do już zaznaczonych
  4. Kliknij na przycisk Delete vertices z głównego paska narzędzi. Wybrane wielokąty zostaną usunięte
  5. Powtarzaj kroki 3-4, aż zostaną tylko te punkty, których chcesz użyć do stworzenia siatki skanowanego obiektu
  6. Wybierz Filters – Remeshing, Simplification and Reconstruction – Screened Poisson Surface Reconstruction
    • Funkcja Reconstruction Depth ma szczególnie ważny wpływ na końcowy rezultat. Wartości w zakresie 13-15 zazwyczaj wyglądają najlepiej i potrzebują rozsądnego czasu do przetworzenia
    • Inne ustawienia działają zazwyczaj w ich domyślnych wartościach, ale możesz z nimi poeksperymentować
  7. Naciśnij Apply, aby stworzyć siatkę
  8. Krawędzie modelu będą zazwyczaj mieć dziwny kształt lub nawet coś będzie z nich „wyrastać”
    • Podobnie, jak przy usuwaniu punktów, to samo możemy zrobić przy usuwaniu trójkątów. Użyj narzędzi Select in triangular region oraz Delete faces z głównego paska
  9. Wybierz File – Export Mesh
    • Jeśli chcesz udostępniać skan wraz z teksturą powierzchni, użyj formatów PLY, 3DS lub OBJ
    • Dla druku 3D wybierz STL

Poprawianie zrekonstruowanego modelu

Poniżej znajdziesz kilka porad dotyczących poprawy niedoskonałości zrekonstruowanego modelu w Meshlabie:

  1. Wygładź model z menu Filters – Smoothing, Fairing and Deformation – Laplacian Smooth
    • Spróbuj zwiększyć wartość Smoothing steps do 8-15
    • Możesz powtórzyć ten proces tyle razy, ile chcesz, jednak wygładzanie powoduje utratę szczegółów
  2. Niepotrzebne powierzchnie usuniesz z menu Filters – Selection – Select Faces with edges longer than…
    • Zaznacz Preview
    • Zmień wartość Edge threshold, aby wybrana została większość powierzchni, które chcesz usunąć, jednocześnie pozostawiając te, które mają znaleźć się w finalnym modelu
  3. Jeśli Twój model ma zbyt dużą ilość trójkątów i powierzchni, to praca z nim będzie utrudniona, nie wspominając o cięciu, które może zajmować wieczność. Możesz zmniejszyć ich ilość z menu Filters – Smoothing, Fairing and Deformation – Quadric Edge Collapse Decimation
    • Ustaw pożądaną ilość powierzchni
    • Wszystko powyżej 1 miliona to zdecydowanie za dużo. Nawet 100 tysięcy to zazwyczaj więcej niż potrzeba

Przykłady

Pomniki

Pomniki są idealne dla fotogrametrii. Ich powierzchnie zazwyczaj są chropowate i nie powodują refleksów. Mają sporo szczegółów, które oprogramowanie może wykorzystać przy porównywaniu fotografii. Oprócz tego zazwyczaj są za duże dla konwencjonalnych skanerów 3D, nie wspominając o niedogodnościach noszenia całego sprzętu i rozstawiania go gdzieś na zewnątrz. Z fotogrametrią jest to proste – wystarczy wziąć aparat i zrobić zdjęcia. Jednak musisz mieć kilka rzeczy na uwadze w związku z otoczeniem. Staraj się unikać poruszających się obiektów na zdjęciach. Jeśli w kadrze znajdują się ludzie, to pozwól im przejść, a w międzyczasie zrób fotografie z kąta, w których są niewidocznie. Jeśli to możliwe, poczekaj, aż słońce zostanie zakryte chmurami, aby pozbyć się twardego światła i cieni.

 

Pomnik The Sitting Woman, autor: Václav Bejček, rok 1967, zrekonstruowany model 3D (podejrzyj w 3D w Sketchfabie) i wydrukowana wersja

Baby Groot

Skanowanie wydruku 3D może wydawać się głupie, a użycie oryginalnego pliku STL jest oczywistym rozwiązaniem. Jest to jednak dobry benchmark dla tej techniki, ponieważ możemy z łatwością porównać zrekonstruowaną siatkę z oryginalnym modelem użytym do wydruku. Innym zastosowaniem może być przeniesienie do postaci cyfrowej wydruku, który został ręcznie pomalowany, aby udostępnić go z naniesioną teksturą.

Jak widzisz na poniższym zrzucie z podglądu 3D, w kwestii geometrii mamy do czynienia z utratą jakości. Większość detali została jednak z powodzeniem odbudowana, a dzięki kilku drobnym poprawkom, model wyglądałby na prawdę dobrze. Tekstura jest za to fajnym dodatkiem.

Wciśnij I, następnie wybierz Matcap, aby ukryć teksturę i porównać samą geometrię modeli

Paletka do ping ponga – sposoby radzenia sobie z powierzchniami odbijającymi światło

Rekonstrukcja paletki do ping ponga była dość prosta, z jednym wyjątkiem. Dwie duże powierzchnie (te, które służą do odbijania piłeczki) nie mają szczegółów, które mogłyby być rozpoznane przez oprogramowanie, a do tego są błyszczące. Podczas okrążeń aparatu wokół paletki, powierzchnie odbijają okoliczne źródła światła, co sprawia, że ich wygląd różni się pomiędzy ujęciami. W rezultacie nie mamy praktycznie punktów do rekonstrukcji, co przełoży się na nieprawidłowy kształt siatki. Aby temu zapobiec, musimy dodać coś, co pozwoli oprogramowaniu lepiej rozpoznać powierzchnie. Łatwym sposobem jest naklejenie taśmy malarskiej. Przyklej kilka pasków na błyszczącej powierzchni, aby stworzyć matową, teksturowaną powierzchnię. W podglądzie 3D widzisz różnicę.

Szkło – powierzchnie przezroczyste

Podobnie, jak w przypadku powierzchni błyszczących, obiekty przezroczyste również stanowią problem. Ostre krawędzie mogą zostać rozpoznane przez oprogramowanie do fotogrametrii, jednak gładkie, transparentne obszary zostaną całkowicie zignorowane, co przełoży się na brak wystarczających danych do odbudowy powierzchni. Również w tym przypadku możesz użyć taśmy malarskiej. Innym sposobem jest pokrycie powierzchni lakierem rozpuszczalnym w wodzie, aby nadać szkłu teksturę.

Podsumowanie

Siatki stworzone przy pomocy fotogrametrii mogą z łatwością przewyższać te stworzone przy pomocy tanich skanerów 3D. Możesz tworzyć modele ogromnych obiektów, które byłyby prawie niemożliwe do zrealizowania przy pomocy tradycyjnych narzędzi do skanowania 3D. Jest niezwykle tania i istnieją duże szanse, że masz już wszystko, co potrzebne – aparat (smartfon) i dość mocny PC. Nie musi się kończyć na modelach pomników. Masz drona? Zrób kilka zdjęć i wydrukuj model swojego domu…

Czy fotogrametria nadaje się do skanowania 3D? Zdecydowanie TAK. Czy warto drukować modele bez dodatkowych poprawek? Prawdopodobnie nie.

Tak, jak przy innych metodach skanowania 3D, tak i tutaj wynikowa siatka nie będzie idealna. W niektórych obszarach może brakować szczegółów, płaskie powierzchnie mogą nie być całkowicie płaskie, siatki mogą zawierać dziury, przecinające się krawędzie i inne błędy. Jeśli jednak jesteś w stanie naprawić takie błędy, to zdecydowanie będzie to warte Twojego czasu.

Źródła

Schonberger, Johannes Lutz and Frahm, Jan-Michael, Structure-from-Motion Revisited. University of North Carolina na Chapel Hill, Eidgenossische Technische Hochschule Zurich.

All3DP – Autodesk 123D Catch Review