Apakah Anda perlu mengotomatiskan sejumlah besar pemindaian fotogrametri? Lalu aku punya kabar baik untukmu.
Video menunjukkan program fotogrametri ruang terbuka
Meshroom . Proyek ini telah ada dalam berbagai bentuk selama beberapa waktu, tetapi baru-baru ini pengembang telah merilis file biner, sehingga Anda dapat mengunduh dan menggunakannya. Video menunjukkan penggunaan GUI untuk memuat gambar, memprosesnya, mengubah parameter, dll. Saya sarankan Anda mencoba program ini dalam tindakan.
Tapi saya tertarik dengan otomatisasi penuh. Jika Anda memiliki instalasi pemindaian tempat Anda membuat 100 atau lebih pemindaian per hari, maka Anda memerlukan solusi yang sepenuhnya otomatis untuk pemrosesan batch file-file ini. Posting ini adalah panduan dan / atau tutorial untuk menyelesaikan masalah ini.
Sebagai permulaan, penting untuk memahami bahwa
Meshroom bukanlah proyek raksasa, monolitik. Bahkan, pemrosesan itu sendiri dilakukan oleh program C ++ terpisah yang dijalankan dari baris perintah, dan
Meshroom adalah program pengkodean Python tipis yang membuat panggilan yang sesuai. Karenanya, alih-alih menggunakan
Meshroom, kami akan menggunakan program ini secara langsung. Perhatikan bahwa sumber lengkap tersedia, sehingga Anda dapat menautkan perpustakaan secara langsung.
Meshroom memiliki fitur lain yang nyaman: selama setiap operasi, perintahnya ditampilkan di terminal. Oleh karena itu, untuk membuat tahapan proses ini, saya hanya bekerja dengan
Meshroom dan melihat tim. Lalu saya melihat ke dalam kode untuk mengubah beberapa parameter. Selain itu, tampaknya ketika Anda memulai Meshroom, Anda dapat memesannya untuk mengumpulkan satu set gambar dari baris perintah, tetapi saya lebih suka untuk tidak menghubungkan langkah-langkah ini.
Persiapan dan instalasi
0: PersyaratanMeshroom /
AliceVision tidak akan berjalan di setiap platform. CUDA diperlukan untuk beberapa langkah, jadi untuk membangun peta mendalam Anda akan membutuhkan GPU NVIDIA. Sayangnya, tidak mungkin untuk menggunakan CPU fallback (mentransfer eksekusi fungsi GPU ke CPU). Jika tidak, program ini akan bekerja dengan sempurna di Windows dan Linux. Petunjuk dalam artikel ini adalah untuk Windows, tetapi dengan sedikit perubahan, mereka dapat disesuaikan untuk Linux.
1: Unduh rilis MeshroomMeshroom 2018.1.0Hal pertama yang harus dilakukan adalah menginstal
Meshroom . Pilih folder tempat Anda ingin melakukan pekerjaan itu, lalu unduh versi terbaru. File zip berisi binari dari semua dependensi.
Jika Anda tertarik untuk berpetualang, maka Anda dapat mencoba menyusun program sendiri. Rilis pustaka tautan dinamis berfungsi dengan baik (/ MD), tapi saya harus meretas file cmake untuk membuat debug build dan / atau build tautan statis. Jika Anda akan membangun program di bawah Windows, maka
SANGAT merekomendasikan menggunakan VCPKG.
2: Unduh dataalicevision / dataset_monstreeJelas, inti dari perangkat lunak fotogrametri adalah untuk memproses gambar Anda sendiri, tetapi pertama-tama saya sarankan menggunakan gambar yang dijamin sesuai. Mereka akan memungkinkan Anda untuk menemukan sumber masalah jika terjadi kesalahan. Untungnya, para pengembang merilis serangkaian gambar untuk pohon tes mereka.
3: Unduh skrip run_alicevision.pyrun_alicevision.zipIni adalah skrip yang akan kita gunakan. Cukup unduh file zip dan unzip ke folder kerja Anda.
4: Instal Pythonhttps://www.python.org/download/releases/2.7/Instal Python jika Anda belum melakukannya. Ya, saya masih menulis kode untuk Python 2.7.0. Cara termudah untuk menginstal
Penginstal MSI Windows X86-64 dari rilis.
5: Instal Meshlab (opsional)MeshLabSebagai langkah opsional, Anda juga harus menginstal
MeshLab . Bahkan, itu tidak akan diperlukan untuk diproses, tetapi pada beberapa tahap data ditampilkan dalam file titik PLY. Mereka tidak dapat diunduh ke
Maya , jadi saya menggunakan
MeshLab untuk melihatnya.
Setelah membongkar semua file, folder akan terlihat seperti ini (dengan pengecualian folder
build_files , yang dihasilkan oleh skrip):
Berikut ini adalah yang berikut:
- build_files: file yang telah kami kompilasi.
- dataset_monstree-master: sumber gambar
- Meshroom-2018.1.0: Binari Meshroom / AliceVision .
- Yang lainnya: skrip untuk menjalankannya, yang diambil dari run_alicevision.zip .
Luncurkan AliceVision
Sekarang saatnya untuk melihat lebih dekat pada
run_alicevision.pyFile Python menerima 5 argumen:
python run_alicevision.py <baseDir> <imgDir> <binDir> <numImages> <runStep>
- baseDir : folder tempat Anda ingin meletakkan file sementara.
- imgDir : folder yang berisi gambar sumber. Dalam kasus kami, IMG_1024.JPG (dan lainnya).
- binDir : Folder yang berisi executable AliceVision , misalnya aliceVision_cameraInit.exe .
- numImages : jumlah gambar di imgDir , dalam kasus kami 6. Tentu saja, Anda dapat mengenali nomor ini secara otomatis, tetapi tujuannya adalah untuk membuat skrip python sesederhana mungkin, jadi Anda harus menentukan sendiri angka ini.
- runStep : operasi yang akan dilakukan.
Untuk meringkas: kita mulai dengan 6 gambar yang terlihat seperti ini:
Menggunakan skrip python
run_alicevision.py, kita akan membuat struktur folder berikut:
Dan di folder
11_Texturing akan ada model siap pakai yang terbuka di
Meshlab :
Masing-masing folder ini adalah salah satu langkahnya. Kita dapat menjalankannya secara bergantian menggunakan file
run_monstree_runXX.bat , atau menggunakan
run_monstree_all.bat untuk mengumpulkan semuanya sekaligus.
Itu saja. Sekarang Anda dapat menjalankan file
run_monstree_all.bat , atau melakukan langkah demi langkah. Anda dapat melihat skrip untuk memahami kerjanya. Bagi mereka yang ingin dapat menyesuaikan pipa pemrosesan, saya menyiapkan pengantar untuk masing-masing langkah.
00_CameraInitLangkah pertama akan menghasilkan file SFM. File SFM adalah file JSON yang menyimpan ukuran kamera, informasi sensor, titik 3d yang ditemukan (pengamatan), faktor distorsi, dan informasi lainnya. File SFM awal dalam folder ini hanya akan berisi informasi tentang sensor dan pilih nilai default dari database sensor lokal. Langkah selanjutnya akan membuat file SFM yang berisi matriks lengkap parameter kamera eksternal, titik, dll.
Anda mungkin perlu mengkonfigurasi langkah ini. Jika Anda menggunakan pengaturan dengan 4 kamera, tetapi mengambil 10 bidikan objek yang berputar pada meja putar, maka Anda memerlukan file SFM dengan 40 gambar, tetapi hanya dengan 4 kalibrasi sensor yang berbeda. Ini adalah alasan utama mengapa saya menyukai struktur
AliceVision . Sangat mudah untuk mengatur operasi batch di dalamnya (misalnya, menghasilkan file SFM Anda sendiri) tanpa kesulitan menyiapkan elemen perangkat lunak lain yang sebaiknya tidak Anda sentuh.
01_FeatureExtractionTahap selanjutnya mengekstrak fitur karakteristik dari gambar, serta deskriptor fitur ini. Ini akan mengubah ekstensi file tergantung pada jenis fitur yang diekstraksi.
02_ImageMatching02_ImageMatching adalah langkah pasca-pemrosesan yang menentukan gambar mana yang logis untuk dipetakan satu sama lain. Jika Anda memiliki satu set 1000 gambar, maka untuk pencarian kasar semua 1000 gambar untuk mencocokkan semua 1000 gambar, Anda memerlukan 1 juta pasangan. Ini bisa memakan banyak waktu (sebenarnya hanya setengah, tetapi Anda memahami prinsipnya). Tahap
02_ImageMatching memotong pasangan ini.
03_FeatureMatching03_FeatureMatching mencocokkan gambar menggunakan deskriptor fitur. File txt yang dihasilkannya tidak perlu dijelaskan.
04_StrukturFromMotionJadi, ini adalah tahap serius pertama. Berdasarkan korespondensi
04_StructureFromMotion ,
ia menghitung posisi kamera serta parameter internal kamera. Perlu dicatat bahwa istilah "Struktur Dari Gerak" digunakan sebagai istilah umum untuk menghitung posisi kamera. Jika Anda memiliki pengaturan untuk fotogrametri dari 10 kamera yang disinkronkan, maka "Struktur Dari Gerak" digunakan untuk memotretnya, bahkan jika tidak ada yang benar-benar bergerak.
Secara default,
Meshroom menyimpan semua data yang dihitung sebagai file
Alembic , tapi saya lebih suka menyimpannya dalam file SFM. Tahap ini menciptakan data antara untuk memastikan bahwa kamera terhubung dengan benar. Pada output, skrip membuat file PLY yang dapat dilihat di
Meshlab . File-file berikut ini penting:
- bundle.sfm: file SFM dengan semua pengamatan.
- cameras.fm: File SFM dengan data hanya untuk kamera yang terpasang.
- cloud_and_poses.ply: poin dan kamera yang ditemukan.
Ini adalah file
cloud_and_poses.ply . Titik hijau adalah kamera. Saya percaya bahwa format ini paling cocok untuk memeriksa tidak adanya kesalahan kotor dalam pengikatan kamera. Jika kesalahan terjadi di suatu tempat, maka Anda dapat kembali dan mengubah fitur, korespondensi, atau parameter SFM.
05_Siapkan DenseSceneTugas utama
05_PrepareDenseScene adalah untuk menghilangkan distorsi gambar. Ini menghasilkan gambar EXR tanpa distorsi, sehingga langkah-langkah selanjutnya dalam menghitung kedalaman dan proyeksi tidak perlu melakukan konversi bolak-balik dari fungsi distorsi. Gambar terlihat seperti ini:
Perlu dicatat bahwa Anda akan melihat area hitam. Langkah-langkah selanjutnya dari
AliceVision tidak menggunakan matriks kamera asli. Sebagai gantinya, kami berpura-pura bahwa kamera memiliki matriks baru tanpa distorsi, dan
05_PrepareDenseScene mengubah gambar asli ke matriks fiktif ini. Karena sensor virtual baru ini lebih besar dari sensor sebenarnya, beberapa area akan tampak kosong (hitam).
06_CameraConnectionSebenarnya, tahap ini melanggar prinsip proses kerja kami. Semua tahap dirancang sehingga setiap folder menjadi tahap terpisah yang benar-benar unik. Namun,
06_CameraConnection membuat file
camsPairsMatrixFromSeeds.bin dalam folder
05_PrepareDenseScene , karena file ini harus berada dalam folder yang sama dengan gambar tanpa distorsi.
07_DepthMapIni adalah fase terpanjang dari
AliceVision : menghasilkan peta kedalaman. Ini menciptakan peta kedalaman untuk setiap gambar sebagai file EXR. Saya mengaturnya agar lebih mudah diperhatikan. Anda dapat melihat "lidah" kecil mencuat dari pohon.
Karena tahap ini membutuhkan banyak waktu, ada parameter yang memungkinkan kita menjalankan kelompok kamera yang berbeda sebagai perintah terpisah yang berbeda. Oleh karena itu, jika Anda memiliki 1000 kamera, maka Anda dapat membuat peta mendalam untuk kelompok kamera pada mesin pertanian yang berbeda. Atau Anda dapat memecah pekerjaan menjadi kelompok-kelompok kecil sehingga jika satu mesin mogok, Anda tidak perlu mengulangi seluruh proses lagi.
08_DepthMapFilterPeta kedalaman sumber tidak akan sepenuhnya konsisten. Beberapa peta kedalaman perlu melihat area yang tumpang tindih dengan peta kedalaman lainnya. Stage
08_DepthMapFilter mengisolasi area-area tersebut dan menegakkan konsistensi kedalaman.
09_MengetahuiIni adalah langkah pertama di mana mesh dihasilkan secara langsung. Mungkin ada masalah kecil dengan jala yang dapat dipecahkan dengan ...
10_MeshFilteringTahap
10_MeshFiltering menerima jala
09_Meshing dan
memolesnya . Ia melakukan operasi berikut:
- Menghaluskan mesh.
- Menghilangkan segitiga besar.
- Menghemat jala terbesar, tetapi menghapus sisanya.
Beberapa operasi ini tidak selalu diinginkan dalam kasus tertentu, sehingga parameter dapat disesuaikan jika perlu.
11_TeksturTahap terakhir.
11_Tekstur membuat UV dan memproyeksikan tekstur. Dan pada tahap ini semuanya berakhir!
Trik terakhir yang dapat Anda lakukan dengan
Meshlab : Anda dapat menarik dan melepas file OBJ dan PLY yang berbeda sebagai lapisan.
Dalam contoh saya, ada lapisan untuk jala jadi, dan untuk poin / kamera SFM. Terkadang langkah smoothing dari mesh dapat sedikit lebih agresif dari yang diperlukan, sehingga berguna untuk membandingkan mesh yang asli dan smoothing. Jika mesh terlihat rusak, maka untuk melacak masalah dalam pipa, lebih mudah untuk menggunakan data SFM dari PLY dan mesh dari OBJ.
Ucapan Terima KasihPosting ini tidak akan lengkap tanpa banyak terima kasih kepada tim pengembangan
AliceVision dan
OpenMVG . Sumber inspirasi adalah proyek
libmv . Proyek ini adalah cikal bakal
OpenMVG , yang merupakan gudang insinyur / peneliti penglihatan komputer untuk mengembangkan algoritma baru.
AliceVision adalah fork dari
OpenMVG , dibuat khusus untuk mengubah algoritma ini menjadi solusi mandiri dalam bentuk produk jadi.
AliceVision / Meshroom adalah proyek open-source yang ambisius dan besar. Prestasi utamanya adalah pencapaian dari proyek akhir seperti itu oleh proyek yang begitu serius, dan kami berutang banyak padanya. Kami juga wajib mengucapkan terima kasih kepada tim
OpenMVG (dan
libmv ), yang karya dasarnya memungkinkan
AliceVision dibuat .
Akhirnya, saya ingin mengucapkan terima kasih khusus kepada Microsoft untuk
VCPKG .
VCPKG adalah manajer paket yang sangat menyederhanakan perakitan proyek sumber terbuka besar untuk Windows. Beberapa tahun yang lalu saya mencoba membangun
OpenMVG di Windows. Itu tidak berakhir dengan baik. Jadi ketika saya mendengar tentang
AliceVision beberapa bulan yang lalu, saya mencoba untuk mengkompilasinya, tetapi gagal bahkan dengan hal-hal yang lebih sederhana. Lalu saya mencoba
VCPKG , dan semuanya langsung bekerja. Sulit untuk mengukur keuntungan menggunakan proyek seperti
VCPKG , tetapi sangat membantu ekosistem open-source untuk Windows.
github.com/alicevisiongithub.com/openMVG/openMVGgithub.com/libmv/libmvgithub.com/Microsoft/vcpkg