mve深度圖解析

MVE(Multi-View Environment),是一款開源的基于圖像的三維重建軟件。在三維重建中有一個(gè)非常重要的步驟就是深度圖(DepthMap)的求解。MVE在重建的過程中會(huì)把它求得的深度圖存放在一個(gè)文件中,但是采用二進(jìn)制存儲(chǔ),我們無法直觀的觀察圖片的深度信息。正好最近需要用到這個(gè)文件,所以根據(jù)MVE的文件存儲(chǔ)說明研究了下它的存儲(chǔ)格式,記錄下來。

在MVE中,深度信息是存放在一個(gè)名為depth-L*.mvei*的值會(huì)根據(jù)所撰參數(shù)的不同而不同,一般來說是圖片縮小的倍數(shù)。該文件的存儲(chǔ)格式說明很簡(jiǎn)單:

.mvei文件存儲(chǔ)格式說明
.mvei文件存儲(chǔ)格式說明

根據(jù)這個(gè)說明,可以看出整個(gè)文件從前往后由3部分構(gòu)成:

1、頭部信息

共11個(gè)字節(jié)。第一個(gè)字節(jié)是/x89,用于和其他文件去分開來;接下來的9個(gè)字節(jié)就是MVE_IMAGE這幾個(gè)字符ASCII值;最后一個(gè)字節(jié)是換行符。

2、圖像信息

這部分包含了圖像的寬度、高度、通道、圖像類型,這些信息都是由一個(gè)4字節(jié)的有符號(hào)整形表示。寬度和高度,有了長(zhǎng)寬就知道一共有多少個(gè)像素,就知道一共有多少個(gè)深度信息;通道部分,由于深度信息只有一個(gè)通道,所以解析出來的值是1;圖像類型是在mve::ImageType這個(gè)枚舉類型中的一種,查看源碼發(fā)現(xiàn)長(zhǎng)這樣:

enum ImageType
{
    IMAGE_TYPE_UNKNOWN,
    /* Unsigned integer types. */
    IMAGE_TYPE_UINT8, // uint8_t, unsigned char
    IMAGE_TYPE_UINT16, // uint16_t
    IMAGE_TYPE_UINT32, // uint32_t, unsigned int
    IMAGE_TYPE_UINT64, // uint64_t
    /* Signed integer types. */
    IMAGE_TYPE_SINT8, // int8_t, char, signed char
    IMAGE_TYPE_SINT16, // int16_t
    IMAGE_TYPE_SINT32, // int32_t, int
    IMAGE_TYPE_SINT64, // int64_t
    /* Floating point types. */
    IMAGE_TYPE_FLOAT, // float
    IMAGE_TYPE_DOUBLE // double
};  

一臉懵逼,說好的整型數(shù)據(jù)呢,,,然而二進(jìn)制解析出來卻是9。一般來說深度信息是浮點(diǎn)數(shù)據(jù),也就是上面的第9個(gè)(程序員請(qǐng)自動(dòng)從0開始數(shù)),剛好對(duì)應(yīng)上,應(yīng)該就是這樣設(shè)定的。

3、深度信息

由圖像信息部分得知了深度信息是采用float型的數(shù)據(jù)存放,也就是每個(gè)數(shù)據(jù)占用4字節(jié),那么只需要每次讀入4字節(jié)的數(shù)據(jù),轉(zhuǎn)化成為float型數(shù)據(jù)就可以得到了一個(gè)像素的深度信息,放入數(shù)組后就可以得到一個(gè)所有像素的深度信息一維數(shù)組。然后根據(jù)圖像的長(zhǎng)寬信息把所有數(shù)據(jù)轉(zhuǎn)化成為二維數(shù)組就可以用了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容