ㄟ[问题] 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