ㄟ[問題] crop image 迴圈優化問題

作者: qwe85158 (xine)   2019-01-09 02:11:45
目前需要大批的原始影像 ( 1024 * 1024 * 3 ) 做裁剪
裁剪的大小為 128*128*3,意思就是每一張原始影像會被平均裁切成64張影像
原本利用numpy加上for loop 發現速度實在太慢
想法 : 用矩陣索引的方式去抓出我要的影像範圍, 例如 -> 0:128, 128:256, 256,384 ..... 896:1024
img_width = 1024
crop_size = 128
CropNumb = int( img_width / crop_size)
for i in range(CropNumb):
for j in range(CropNumb):
cropImg = Img[i*size:(i+1)*size, j*size:(j+1)*size, :]
...
...
跑程式的速度真的要很久,尤其當原始影像數目龐大的時候,我想是否有更好的解法處理crop的問題
目前只有想到先創一個 temp , 例如 -> temp = [ [0,128] , [128, 256] .... [896,1024] ]
然後讀入影像後用一個for loop 加上 64行利用 temp 當 ndarray 索引去抓影像範圍
例如: c1 = Img[temp[0][0]:temp[0][1], temp[0][0]:temp[0][1], :]
c2 = Img[temp[0][0]:temp[0][1], temp[1][0]:temp[1][1], :]
c3 = Img[temp[0][0]:temp[0][1], temp[2][0]:temp[2][1], :]
c4 = Img[temp[0][0]:temp[0][1], temp[3][0]:temp[3][1], :]
.... 以此類推
c64
這個方法可能會讓記憶體生出64個空間放這些矩陣,應該是利用空間換取時間的策略,很像是在做優化的問題
想請問版上朋友們對這類問題有甚麼建議的?
作者: qwe85158 (xine)   2019-01-09 20:35:00
感謝~
作者: germun (ger)   2019-01-09 07:35:00
skimage view_as_blocks

Links booklink

Contact Us: admin [ a t ] ucptt.com