摘? 要:由于硬件設(shè)備的限制,高動態(tài)范圍圖像(HDRI)需要由一系列同一角度,不同曝光量的圖片合成得出。人工完成此過程需要較長時間,而較長的拍攝時間會提高后期處理時的工作量。為此,文章提出了一種以Arduino微控制器為核心,配合電機(jī)和個人電腦的自動化HDRI拍攝設(shè)備。該系統(tǒng)通過Arduino、藍(lán)牙、Wi-Fi、步進(jìn)電機(jī)以及個人電腦的配合能夠有效實(shí)現(xiàn)全自動完成HDRI全景圖的拍攝,并能降低后續(xù)流程的工作量。
關(guān)鍵詞:HDRI;全景圖;Arduino
中圖分類號:TP368? ? ? ? 文獻(xiàn)標(biāo)識碼:A文章編號:2096-4706(2022)04-0182-04
Design and Manufacture of a HDRI Automatic Image Capturing Device
YANG Runtian
(Department of Electronic and Computer Engineering, University of Toronto, M5S 1A1 Canada)
Abstract: Due to the limitation of hardware equipment, HDRI needs to be synthesized from a series of pictures with the same angle and different exposure. It takes a long time to complete this process manually, and the longer shooting time will increase the workload of post-processing. Therefore, this paper proposes an automatic HDRI photographing device with Arduino microcontroller as the core, combined with motor and personal computer. Through the cooperation of Arduino, Bluetooth, Wi-Fi, stepping motor and personal computer, the system can effectively complete the shooting of HDRI panorama automatically and reduce the workload of subsequent processes.
Keywords: HDRI; panorama; Arduino
0? 引? 言
高動態(tài)范圍圖像(HDRI)是現(xiàn)代計算機(jī)繪圖任務(wù)中的一類重要資源,在數(shù)字藝術(shù)以及影視制作中有著廣泛的應(yīng)用[1]。不同于一般的圖片,高動態(tài)范圍圖像的亮度未經(jīng)剪裁,保留了完整的光照信息[1],因此能夠在計算機(jī)軟件中真實(shí)地重現(xiàn)拍攝時場景的光照情況,從而使模型渲染,后期特效合成的效果更加真實(shí),在達(dá)到相同視覺效果的條件下節(jié)省人力[2]。
由于硬件設(shè)備的限制,HDRI圖像需要由一系列同一角度,不同曝光量的圖片合成得出。在拍攝全景HDRI圖像時則需在每個不同角度拍攝數(shù)張不同曝光量的圖片[1]。這一過程十分煩瑣費(fèi)時,且隨著拍攝時間增加,云層和太陽的移動會使得后期合成更加困難。拍攝者的陰影也會極大地增添后期處理的工作量。因此本文提出了一種以Arduino微控制器為核心,結(jié)合電機(jī)和電腦的自動化HDRI拍攝設(shè)備。
1? 系統(tǒng)結(jié)構(gòu)和工作流程
該系統(tǒng)主要分為兩部分,一部分為可遙控的自動三腳架,主要由Arduino控制器、步進(jìn)電機(jī)驅(qū)動器、電源、以及藍(lán)牙模塊組成,另一部分是PC端的控制軟件,如圖1所示。
系統(tǒng)工作時,首先由PC通過藍(lán)牙連接自動三腳架,由Wi-Fi連接相機(jī)。程序檢測連接正常后,用戶可以設(shè)定拍攝參數(shù)并命令開始拍攝。PC端的程序?qū)ㄟ^用戶給定的參數(shù)計算所需的拍攝角度、曝光時間、光圈大小以及感光度,通過藍(lán)牙連接控制三腳架轉(zhuǎn)動到指定角度,并通過Wi-Fi設(shè)置相機(jī)的拍攝參數(shù)并遙控按下快門。在一個角度拍攝完所需的數(shù)張圖片后會轉(zhuǎn)動到下一個角度并重復(fù)這一流程,直到拍攝完所有角度的圖片。
之后用戶可導(dǎo)出相機(jī)中的圖片,用PC端軟件將不同曝光量的圖片合并形成高動態(tài)范圍圖像,并用現(xiàn)有的全景圖拼接軟件拼接成全景圖片。
2? 硬件設(shè)計
本系統(tǒng)的設(shè)計目標(biāo)人群為計算機(jī)藝術(shù)及攝影愛好者,因此以器材易于購買,制作方便,模塊化為主要設(shè)計思路。
2.1? 電源系統(tǒng)
由于全景圖大多拍攝于野外,此系統(tǒng)使用12 V,1500 mAh可充電鋰電池作為電源。此型號的電池便于攜帶,容量適中且易于購買,符合此系統(tǒng)的設(shè)計思路。由于Arduino要求5 V電壓供電,此系統(tǒng)使用了DC-DC降壓模塊將12 V轉(zhuǎn)換為5 V電壓,如圖2所示。為方便使用者查看電池剩余電量,系統(tǒng)內(nèi)設(shè)置了可開關(guān)的數(shù)碼管電壓顯示器,在方便使用者的同時也能避免顯示器的燈光在夜間環(huán)境下影響拍攝質(zhì)量。降壓模塊和電機(jī)驅(qū)動模塊被分開放置以防發(fā)熱過于集中。
2.2? 電機(jī)及機(jī)械結(jié)構(gòu)
電機(jī)選用了市面上常見的42步進(jìn)電機(jī)。該電機(jī)被廣泛用于3D打印機(jī)等創(chuàng)客項(xiàng)目中,有豐富的配件支持以及較高的穩(wěn)定性。
機(jī)械結(jié)構(gòu)主要由3D打印成型,對強(qiáng)度要求高的連桿和軸承等結(jié)構(gòu)則購買市面上的通用部件。大體上此系統(tǒng)可以分為三部分:基座、主體、搖臂,如圖3、圖4所示?;还潭ㄔ谌_架上,系統(tǒng)中的大部分電子元件用尼龍扎帶固定在基座的預(yù)留槽中。主體由鋼軸和軸承與基座連接,并用同步帶驅(qū)動。主體包含了系統(tǒng)中的兩個步進(jìn)電機(jī),并起到連接基座和搖臂的作用。搖臂用鋼軸和軸承與主體連接,由同步帶驅(qū)動,末端有用于固定相機(jī)的卡扣。
系統(tǒng)工作時,一顆電機(jī)控制相機(jī)的平面朝向(即東南西北),另一顆電機(jī)控制相機(jī)的俯仰(即低頭抬頭)。其中控制俯仰的電機(jī)需要對抗相機(jī)自身的重力,因此在其上方設(shè)置了可增加皮筋的掛鉤,可在相機(jī)較重的時候使用皮筋助力以防止電機(jī)扭矩不足。
電機(jī)與打印件之間連接的同步帶皆有可調(diào)節(jié)結(jié)構(gòu)鎖緊,在方便組裝的同時防止在工作時打滑。
2.3? 控制系統(tǒng)
Arduino Nano、藍(lán)牙模塊、電機(jī)驅(qū)動器、以及降壓模塊由尼龍扎帶固定在基座上,之間用杜邦線連接,方便組裝和故障檢修。其中Arduino Nano和電機(jī)驅(qū)動器之間的連線較多,因此被集成在同一塊電路板上,如圖5所示。模塊和電路板之間的連接使用了標(biāo)準(zhǔn)的杜邦插槽,方便組裝和更換。
Arduino Nano的通用IO接口被用于控制電機(jī)驅(qū)動器的電機(jī)轉(zhuǎn)向和步進(jìn)接口,以及接收藍(lán)牙模塊的數(shù)據(jù)輸入。PCB布局如圖6所示。
3? 軟件設(shè)計
3.1? 控制軟件
此系統(tǒng)包含兩套軟件,一套為Arduino中的程序,一套為PC端上的程序。其中Arduino的程序用C++編寫,PC端的程序由Python編寫。
Arduino的任務(wù)只有控制電機(jī),因此Arduino與PC端的通訊方式參考了功能類似的G-code。G-code通常被用于控制數(shù)字機(jī)床,激光切割機(jī)或3D打印機(jī)。鑒于此系統(tǒng)的功能略有不同,同時也為降低指令的處理難度,此系統(tǒng)極大的簡化和更改了G-code的格式和指令集以適應(yīng)此系統(tǒng)的應(yīng)用場景。
工作時,PC端的軟件通過藍(lán)牙的串口透傳功能將指令字符串發(fā)送給Arduino,Arduino在接受并完成指令后會再通過藍(lán)牙發(fā)送表示完成的字符串,此時PC端的軟件便可以發(fā)送下一條指令。如果PC端一次發(fā)送了多條指令,Arduino會在內(nèi)存中保存指令隊(duì)列并按順序執(zhí)行。PC端也可以在任何時刻發(fā)送急停信號來終止并清空指令隊(duì)列。
PC端與相機(jī)的通訊由Wi-Fi連接,并用佳能相機(jī)的網(wǎng)絡(luò)API完成。其中相機(jī)作為服務(wù)器,PC端的軟件通過GET或POST http指令來獲取或設(shè)置相機(jī)參數(shù)并遙控快門。
PC端使用pybluez庫實(shí)現(xiàn)跨平臺的藍(lán)牙訪問[3],使用了requests庫實(shí)現(xiàn)跨平臺網(wǎng)絡(luò)訪問。Arduino指令如表1所示。
3.2? 圖像合并軟件
在完成拍攝后,需要先將同一角度不同曝光量的圖片合并成亮度未剪裁的高動態(tài)范圍圖片。
一般相機(jī)拍攝的jpg格式圖片都會由相機(jī)從線性顏色空間轉(zhuǎn)換為sRGB顏色空間[4]。這是因?yàn)槌R姷娘@示器能夠顯示的亮度范圍有限,為了使圖片觀感上更接近拍攝時的效果,圖像的顏色需要經(jīng)過非線性變換,即顏色空間的轉(zhuǎn)換[5,6]。
但HDRI的拍攝目的并非感官上好看的圖片,而是與真實(shí)環(huán)境亮度相符的圖片,因此不應(yīng)經(jīng)過這一步處理。為保證HDRI圖片畫面質(zhì)量不被壓縮,拍攝者應(yīng)直接使用包含相機(jī)感光元件記錄的完整信息的RAW格式圖片。這些文件在經(jīng)過RAW格式處理軟件轉(zhuǎn)碼后可以得到圖像亮度與現(xiàn)實(shí)亮度為線性關(guān)系的圖片,通常保存為16位TIFF文件[5]。
在得到不同曝光量的線性亮度圖片后,這些圖片需要被合成為高動態(tài)范圍圖片。因?yàn)橄鄼C(jī)的硬件限制,感光元件只能準(zhǔn)確記錄一定范圍內(nèi)的亮度信息,過亮或過暗都會導(dǎo)致信息的不準(zhǔn)確和噪點(diǎn)。這一記錄范圍就是圖片的動態(tài)范圍。在得到不同曝光量的圖片后,可以在軟件中將每張圖片過亮(過曝)或過暗(欠曝)的部分去除,并將幾張圖片進(jìn)行適當(dāng)?shù)钠毓庋a(bǔ)償后疊加,就能使整個畫幅都有準(zhǔn)確的亮度信息[1]。因?yàn)樽罱K的成品圖片有著遠(yuǎn)超出一般相機(jī)能夠拍攝的動態(tài)范圍,所以被稱為高動態(tài)范圍圖片(HDRI)。以上操作由Python腳本使用imageio及numpy自動完成[7,8]。
最終的高動態(tài)范圍圖片可被現(xiàn)有的全景圖拼接軟件拼接成全景圖[9,10],并導(dǎo)入至3D軟件中使用[2]。
4? 結(jié)? 論
本文介紹了一種自動化HDRI圖片拍攝的設(shè)備,探討了軟硬件的設(shè)計思路和方法,以及HDRI合成的基本原理。
本文提到的自動化系統(tǒng)已經(jīng)能夠?qū)崿F(xiàn)基本功能,拍攝和合成HDRI,并能夠在3D軟件中使用。但此系統(tǒng)在操作的便捷和便攜性上還有較大提升空間??梢灶A(yù)見的改進(jìn)方向包括整體機(jī)械結(jié)構(gòu)的小型化,穩(wěn)定化,結(jié)構(gòu)與收納箱的集成,防塵防雨結(jié)構(gòu),以及移動端圖形化控制軟件的開發(fā)。
參考文獻(xiàn):
[1] POLY HAVEN BLOG. How to Create High Quality HDR Environments [EB/OL].[2021-12-12].https://blog.polyhaven.com/how-to-create-high-quality-hdri.
[2] 吳昊.影視制作中HDRI技術(shù)的應(yīng)用與研究 [J].電腦編程技巧與維護(hù),2011(20):116-117.
[3] GITHUB. pybluez [EB/OL].[2021-12-12].https://github.com/pybluez/pybluez.
[4] CAMBRIDGE IN COLOUR. Understanding Gamma Correctio [EB/OL].[2021-12-12]. https://www.cambridgeincolour.com/tutorials/gamma-correction.htm.
[5] RAWPEDIA. rawpedia [EB/OL].[2021-12-12].http://rawpedia.rawtherapee.com/.
[6] CHAOS. Understanding sRGB,gamma,color values [EB/OL].[2021-12-12]. https://support.chaos.com/hc/en-us/articles/4528579184657--Understanding-sRGB-gamma-color-values-.
[7] IMAGEIO. Welcome to imageio’s documentation! [EB/OL].[2021-12-12].https://imageio.readthedocs.io/en/stable/.
[8] NUMPY. NumPy documentation [EB/OL].[2021-12-12].https://numpy.org/doc/stable/.
[9] 漆馳,劉強(qiáng),孫家廣.攝像機(jī)圖像序列的全景圖拼接 [J].計算機(jī)輔助設(shè)計與圖形學(xué)學(xué)報,2001.(7):605-609.
[10] YOUKIAAA.全景拼接原理及實(shí)現(xiàn)_Yokia-CSDN博客_全景拼接 [EB/OL].[2021-12-12].https://blog.csdn.net/qq_37374643/article/details/88930316.
作者簡介:楊潤天(2001—),男,漢族,北京人,本科在讀,主要研究方向:硬件與軟件工程。