用于 Python 图像处理的类似 Blockproc 的函数

Ren*_*nie 5 python matlab image-processing

编辑:这是一个图像,所以建议的(How can I effective process a numpy array inblocksimilar to Matlab's blkproc (blockproc) function)并不真正适合我

我有以下 matlab 代码

fun = @(block_struct) ...
std2(block_struct.data) * ones(size(block_struct.data));

B=blockproc(im2double(Icorrected), [4 4], fun);
Run Code Online (Sandbox Code Playgroud)

我想重新编写我的代码,但这次是用 Python。我已经安装了 Scikit,我正在尝试像这样解决它

b = np.std(a, axis = 2) 
Run Code Online (Sandbox Code Playgroud)

当然,问题是我没有将 std 应用于多个块,就像上面一样。

我怎样才能做这样的事情?启动一个循环并尝试为每个 X*X 块调用该函数?然后我就不会保持原来的尺寸了。

还有其他更有效的方法吗?

Ren*_*nie 0

我做了以下事情

io.use_plugin('pil', 'imread')
a = io.imread('C:\Users\Dimitrios\Desktop\polimesa\\arizona.jpg')

B = np.zeros((len(a)/2 +1, len(a[0])/2 +1))


for i in xrange(0, len(a), 2):
    for j in xrange(0, len(a[0]), 2):
        x.append(a[i][j])
        if i+1 < len(a):
            x.append(a[i+1][j])
        if j+1 < len(a[0]):
           x.append(a[i][j+1])
        if i+1 < len(a) and j+1 < len(a[0]):
           x.append(a[i+1][j+1])
        B[i/2][j/2] = np.std(x)
        x[:] = []         
Run Code Online (Sandbox Code Playgroud)

我认为这是正确的。将图像迭代 2 次并获取每个邻居节点,将它们添加到列表中并计算 std。

编辑* 稍后针对 4x4 块进行编辑。