我需要在代表某些物理阵列的或多或少的同质图像中搜索异常值。图像的分辨率远高于屏幕分辨率。因此,屏幕上的每个像素都源自图像像素块。是否有可能自定义计算这样一个块的显示值的算法?特别是使用最低值或最高值的可能性会有所帮助。
提前致谢
答案 0 :(得分:1)
Scipy提供了几个这样的过滤器。要获得一个新图像(新),其像素是原始图像(img)的w * w块上的最大值/最小值,您可以使用:
new = scipy.ndimage.filters.maximum_filter(img, w)
new = scipy.ndimage.filters.minimum_filter(img, w)
scipy.ndimage.filters有several other filters available。
如果标准过滤器不符合您的要求,您可以自己动手。这里是一个示例,展示了如何在图像中的每个块中获得最小值。此功能可在每个方向上将整个图像(img)的大小减小w倍。它返回一个较小的图像(新),其中每个像素是原始图像的w * w像素块中的最小像素。该函数假定图像处于numpy数组中:
import numpy as np
def condense(img, w):
new = np.zeros((img.shape[0]/w, img.shape[1]/w))
for i in range(0, img.shape[1]//w):
col1 = i * w
new[:, i] = img[:, col1:col1+w].reshape(-1, w*w).min(1)
return new
如果您想要最大值,请将min替换为最大值
要使压缩功能正常工作,整个图像的大小必须是每个方向上w的倍数。处理非正方形块或不完全分割的图像留给读者练习。