<p>首先,考虑迁移到python3.*。Numpy正在放弃对Python<a href="https://github.com/numpy/numpy/blob/master/doc/neps/dropping-python2.7-proposal.rst" rel="nofollow noreferrer">Numpy is dropping support for Python 2.7 from 2020</a>的支持。在</p>
<p>你的密码问题。你错过了下面使用Numpy的要点。Numpy是从较低级别的库编译的,运行速度非常快,您不应该在Python中循环索引,您应该向Numpy抛出矩阵。在</p>
<p><b>问题1</b>
使用listcomp和np.数组在</p>
<pre><code>import numpy as np
import time
# create dummy image structure (k, i, j, c) or (k, i, j)
# k is image index, i is row, j is columns, c is channel RGB
images = np.random.uniform(0, 30000, size=(170, 512, 512))
t_start = time.time()
norm_images = np.array([(255*images[k, :, :]/images[k, :, :].max()).astype(int) for k in range(170)])
t_end = time.time()
print("Processing time = {} seconds".format(t_end-t_start))
print("Input shape = {}".format(images.shape))
print("Output shape = {}".format(norm_images.shape))
print("Maximum input value = {}".format(images.max()))
print("Maximum output value = {}".format(norm_images.max()))
</code></pre>
<p>这将创建以下输出</p>
^{pr2}$
<p>需要0.25秒!在</p>
<p><b>问题2</b>
不知道你在这里是什么意思,但是如果你想把单色图像的值克隆到RGB值,你可以这样做</p>
<pre><code># coloring (by copying value and keeping your structure)
color_img = np.array([np.tile(images[k], 3) for k in range(170)])
print("Output shape = {}".format(color_img.shape))
</code></pre>
<p>产生</p>
<pre><code>Output shape = (170, 512, 1536)
</code></pre>
<p>如果你想保留(c,i,j,k)结构</p>
<pre><code>color_img = np.array([[images[k]]*3 for k in range(170)]) # that creates (170, 3, 512, 512)
color_img = np.swapaxes(np.swapaxes(color_img, 1,2), 2, 3) # that creates (170, 512, 512, 3)
</code></pre>
<p>所有这些需要0.26秒!在</p>
<p><b>问题3</b>
给某些区域着色,我会再次使用一个函数和一个listcomp。因为这是一个例子,我使用了默认的颜色(255,40,0),但是你可以使用任何东西,包括LUT。在</p>
<pre><code># create mask of zeros and ones
mask = np.floor(np.random.uniform(0,256, size=(512,512)))
default_scheme = (255, 40, 0)
def substitute(cimg, mask, scheme):
ind = mask > 250
cimg[ind, :] = scheme
return cimg
new_cimg = np.array([substitute(color_img[k], mask, default_scheme) for k in range(170)])
</code></pre>