不管您遇到的索引错误(其他人已经解决过),迭代像素/体素都不是处理图像的有效方法。{在多维图像中,你变得更加明显。在
正确的方法是在支持向量化的编程语言中使用向量化(例如Python、Julia、MATLAB)。通过这种方法,你将获得你想要的结果,效率要高得多(而且速度要快上千倍)。Click here了解更多关于矢量化的信息(又名。数组编程)。在Python中,这可以通过使用生成器来实现,生成器不适用于图像,因为它们在调用之前不会真正生成结果;或者使用NumPy数组。在
下面是一个例子:
矢量化掩模图像矩阵from numpy.random import randint
from matplotlib.pyplot import figure, imshow, title, grid, show
def mask_img(img, thresh, replacement):
# Copy of the image for masking. Use of |.copy()| is essential to
# prevent memory mapping.
masked = initial_image.copy()
# Replacement is the value to replace anything that
# (in this case) is bellow the threshold.
masked[initial_image
return masked
# Initial image to be masked (arbitrary example here).
# In this example, we assign a 100 x 100 matrix of random integers
# between 1 and 256 as our sample image.
initial_image = randint(0, 256, [100, 100])
threshold = 150 # Threshold
# Masking process.
masked_image = mask_img(initial_image, threshold, 0)
# Plots.
fig = figure(figsize=[16,9])
fig.add_subplot(121)
imshow(initial_image, interpolation='None', cmap='gray')
title('Initial image')
grid('off')
fig.add_subplot(122)
imshow(masked_image, interpolation='None', cmap='gray')
title('Masked image')
grid('off')
show()
返回:
当然,您可以将掩蔽过程(函数)放在一个循环中对一批图像执行此操作。你可以修改索引,也可以在3D、4D(如MRI)或5D(如CAT扫描)图像上进行,而无需迭代每个单独的像素或体素。在
希望这有帮助。在