当前位置: 首页 > 面试题库 >

计算方差图像python

颜永怡
2023-03-14
问题内容

有没有一种简单的方法可以使用Python / NumPy /
Scipy在图像上计算运行方差过滤器?通过运行方差图像,我的意思是为图像中每个子窗口I计算sum((I-mean(I))^ 2)/ nPixels的结果。

由于图像很大(12000x12000像素),我想避免在格式之间转换数组的开销,以便能够使用其他库,然后再转换回去。

我想我可以通过使用类似的方法找到平均值来手动完成此操作

kernel = np.ones((winSize, winSize))/winSize**2
image_mean = scipy.ndimage.convolve(image, kernel)
diff = (image - image_mean)**2
# Calculate sum over winSize*winSize sub-images
# Subsample result

但是拥有Matlab的stdfilt-function这样的东西会更好。

谁能指出我具有这种功能并支持numpy数组的库的方向,还是暗示/提供了一种在NumPy / SciPy中实现此目的的方法?


问题答案:

更简单,更快的解决方案:使用SciPy
ndimage.uniform_filter

import numpy as np
from scipy import ndimage 
rows, cols = 500, 500
win_rows, win_cols = 5, 5

img = np.random.rand(rows, cols)
win_mean = ndimage.uniform_filter(img, (win_rows, win_cols))
win_sqr_mean = ndimage.uniform_filter(img**2, (win_rows, win_cols))
win_var = win_sqr_mean - win_mean**2

“大步小把戏”是很漂亮的把戏,但慢4个且不易读。在generic_filter比慢迈进20倍…



 类似资料: