从gabor滤波器的例子中提取,从skimage计算图像的gabor滤波器很容易:
import numpy as np
from scipy import ndimage as nd
from skimage import data
from skimage.util import img_as_float
from skimage.filter import gabor_kernel
brick = img_as_float(data.load('brick.png'))
kernel = np.real(gabor_kernel(0.15, theta = 0.5 * np.pi,sigma_x=5, sigma_y=5))
filtered = nd.convolve(brick, kernel, mode='reflect')
mean = filtered.mean()
variance = filtered.var()
brick只是一个numpy数组。假设我有一个5000*5000纳米阵列。我想要实现的是生成两个新的5000*5000 numpy数组,其中像素是以它们为中心的15*15窗口的gabor滤波器的平均值和var值。
有谁能帮我实现这个目标吗?
编辑
为什么我被否决了?无论如何,为了澄清我展示了一个如何计算单个图像上的gabor滤波器的例子。我想简单地计算一个非常大的图像(因此滑动窗口)的小平方子集上的gabor滤波器。
最佳答案
没有标准的方法可以做到这一点(据我所知),但你可以自己直接做到。
卷积中的每个像素是移位gabor滤波器的值乘以图像像素的和。也就是说,卷积中的每个像素基本上是一个常数归一化因子内的平均值,所以filtered
基本上是你的平均值。
方差有点难,因为那是平方和,当然,在计算和之前,你需要计算平方。但是,通过预平方图像和内核,您可以很容易地做到这一点,即:
N = kernel.shape[0]*kernel.shape[1]
mean = nd.convolve(brick, kernel, mode='reflect')/N
var = nd.convolve(brick*brick, kernel*kernel, mode='reflect')/N - mean*mean