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 块调用该函数?然后我就不会保持原来的尺寸了。
还有其他更有效的方法吗?
我做了以下事情
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 块进行编辑。