我在用python3(这个特定任务的NumPy)自学彩色图像处理。在
我有一个3d张量,代表图像中每个像素的RGB值,所以它的形状是(高,宽,3)。在每个像素处,我要生成新的RGB值,这些值是给定像素处原始RGB值的线性组合。我将通过将每个像素处的RGB向量乘以3x3权重矩阵来实现这一点。在
我可以用嵌套的for循环来完成这一点,但速度很慢:newRGB = np.zeros((height,width,3)) #make empty array to update with RGB values
for i in range(height):
for j in range(width):
RGB = image[i,j,:] #RGB vector at given pixel with size 3 since is [R,G,B]
new = np.dot(W,RGB) #W is 3x3 matrix of weights
newRGB[i,j,:] = new #put new RGB values into the empty matrix
或者,更快的矢量化方法是:
^{pr2}$
是吗?是否有一种不那么麻烦的方法来完成此操作,例如使用纽比·坦索多特() ? 在
是吗?或者,既然我是采用RGB值的线性组合,我可以创建某种3D线性滤波器,并通过在FFT空间中进行简单的元素乘法将其与图像卷积吗?在
现在我的图像大约是1000x1000像素,所以RGB数组的形状大致是(10001000,3)。但我也对向量化的其他应用感兴趣,这些应用可能有更大的数组(或更高的维度),因此,与更大的数组大小和维度相关的答案也值得赞赏。在
非常感谢你的建议,我真的很感激。在