1. 程式人生 > >[win10] 4-D資料抽取圖片

[win10] 4-D資料抽取圖片

The first weekly report of the second week on October 29, 2018

 0.資料介紹      

        博主有一個如下的資料,現在任務是將img(這個資料的代稱,後續將簡寫為img)抽出成一系列 size =(2048, 788)的圖片序列。我們可以把他看作[3,851,2048,788]的4-D資料,物理意義是:把一個東西分成3塊,每一塊切成851片,每一片可以看作是一個影象,大小為2048X788。

Dimension [C, Z, T] = [1, 3, 851]
[Width, Height] = [2048, 788]

1.匯入資料

        利用計時模組,匯入2.7g大小資料花銷情況如下。(IDE:spyder,記憶體:8g)

資料大小 2.7g
time 185.4144778251648 秒
memory 7.5/7.9 (我把後臺基本都關了...)

2.資料分析

        匯入後的img是一個numpy的array,dtype = uint16。這塊有個小細節:我想要匯入的img理想維度資訊應該是[3,851,2048,788],可是python匯入後資料軸的順序亂了,博主做了一些實驗,我們可以通過呼叫 img[90,:,:,1] 這樣的方法,而不用reshape等函式改變維度(反而增大計算開銷)。

        但是考慮到計算機硬體影響,博主對資料集進行了“裁剪”,見下一章。

3.自制:小樣本

        由於匯入後的資料是numpy格式的,自然而然想到npy儲存多維陣列,這裡我也進行了實現,得到了一個比較有意思的發現。下面是我儲存資料的語句,我只是把851那個維度的儲存了200組,這樣子我們在後續安排好API對接上就行了。

np.save(r'D:\Liu_Dong\Brain_map_compression\ZhangYueYi\raw_brain\img\00.npy',img[200:400,:,:,:])

 儲存得到的npy如下

        是不是有點問題?我只儲存了大概25%的資料,但是卻佔了原來Raw.ome.tif 的66%的空間

,這裡博主猜想原始資料可能經過了某種壓縮,而npy可能沒有經過壓縮或者壓的少,給我們帶來的好處可以見下一章。

4.小樣本的執行情況

資料大小 1.8g
time 17.000636339187622 秒
memory 5.4/7.9 

        資料由2.7g->1.8g,但是匯入時間變成了17s,幾乎提高了10倍匯入速度......我猜想這個原因可能是原始資料匯入要解碼,增大了時間的花銷。

        不管怎麼樣,我們自制的小樣本已經準備好了,接下來就是抽離影象的模組。

5.抽離影象

        最直白的第一個想法就是for迴圈,按照線性索引,把他匯出完事。事實上好像也只能這麼做,因為讀出的函式是封裝好的cv2.imwrite,這個函式只能進一個二維陣列出一個圖儲存,所以以後優化最直接的方法就是換一個gpu的類似功能的函式,進好幾個圖,出好幾個圖(*記錄。這裡,先進行最初的版本。

5.1最初版本執行情況

資料大小 1.8g
time 17.925428867340088 秒
memory 5.4/7.9 

        對,你沒看錯。。匯出資料多了1s左右,所以按照木桶效應,我應該主動優化資料匯入。(*記錄