如何有效地将函数应用于Numpy中固定大小的所有子阵列?

2024-09-29 23:19:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Numpy的新手,最近我被卡住了。我正在编写一个分形压缩算法,其步骤之一是在应用一些变换后,根据均方误差从给定的小图像(例如10x10像素)的给定图像resized_image中找到最接近的子图像。 现在,我的函数如下所示:

def find_block_transform(image, resized_image, x, y, block_size, stride):
    best_transform=BlockTransform(0,0,0,0,0)
    bestMSE=1000000000
    img =image[y:y+block_size,x:x+block_size]
    print(resized_image.shape[0])
    for i in range(0,resized_image.shape[0]-block_size,stride):
        for j in range(0,resized_image.shape[1]-block_size,stride):
            domain=resized_image[i:i+block_size,j:j+block_size]
            DD=np.sum(domain*domain)
            DR=np.sum(domain*img)
            R=np.sum(img)
            D=np.sum(domain)
            q=(DR-D*R/(block_size*block_size))/(DD-D*D/(block_size*block_size))
            p=(R-D*q)/(block_size*block_size)
            MSE=mse(domain*q+p,img)
            if(MSE<bestMSE):
                bestMSE=MSE
                best_transform=BlockTransform(i,j,q,p,0)
    return best_transform

不幸的是,这种方法非常缓慢。对于resized_image大小的256x256和block_size大小的10x10,几乎需要5秒。对于block_size50x50,只需几秒钟。 我认为由于双for循环,代码速度很慢。有没有办法让Numpy更快


Tags: 图像imageimgforsizedomainnptransform

热门问题