优化性能以使用最大像素值调整大小

时间:2017-04-09 22:37:39

标签: python image resize

我想通过仅保留每个像素集的最大像素值来减小图像的一个尺寸。我在python中实现了这个:

def pixel_max_resize(img, h, w):    
    imr = np.zeros((h,w),  dtype=np.uint8)
    r = int(h/w)    
    for j in range(0,w):
         imr[:,j] = np.amax(img[:,j*r:j*r+r], axis = 1) 
    return imr

此函数比相同大小的cv2.resize慢很多(因子为5-10)。任何人都知道如何优化此功能的速度?是否有一个列表理解公式可以加快这个过程?

1 个答案:

答案 0 :(得分:0)

我并非100%确定您要实现的目标,因为如果目标高度不等于源高度,则代码会抛出错误。无论如何,这是一个基于每个子样本区域的最大值来调整图像大小的函数。它比您的代码快3-5倍。

def pixel_max_resize(img, h, w):
    source_h, source_w = img.shape
    return img.reshape(h,source_h // h,-1,source_w // w).swapaxes(1,2).reshape(h,w,-1).max(axis=2)

(警告:源宽度和高度必须分别是目标宽度和高度的整数倍)

<强>解释

源2d图像被划分为3d阵列,使得第一和第二轴具有目标宽度和高度的大小,第三轴包含要针对一个目标像素进行二次采样的所有像素的值。此轴上的max()返回每个子样本的最大值。