首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更改图像通道顺序的正确方法是先更改通道,然后再更改通道?

更改图像通道顺序的正确方法是先更改通道,然后再更改通道?
EN

Stack Overflow用户
提问于 2017-05-07 17:05:20
回答 5查看 58K关注 0票数 43

我无论如何也想不出如何切换图像排序。图像是以(x,x,3)格式读取的,theano要求它是(3,x,x)格式。我尝试使用numpy.array([img[:,:,i] for i in range(3)])更改顺序

我猜这就完成了工作,但它既丑陋,我也不知道如何反转它来恢复原始图像。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-06-08 07:45:00

我同意@Qualia的评论,np.moveaxis(a, source, destination)更容易理解。这就是工作:

代码语言:javascript
复制
x = np.zeros((12, 12, 3))
x.shape
#yields: 
(12, 12, 3)

x = np.moveaxis(x, -1, 0)
x.shape
#yields: 
(3, 12, 12)
票数 31
EN

Stack Overflow用户

发布于 2017-05-08 00:09:33

重新排序数据的步骤

您可以使用numpy.rollaxis将轴3滚动到位置1(考虑到您的批次大小为维度0)。

代码语言:javascript
复制
np.rollaxis(imagesArray, 3, 1)  

但是,如果您正在使用keras,您可能希望更改其配置或按层定义它。如果你使用的是Keras,Theano不需要你做任何事情。

除了允许您在每个单独的层中定义通道之外,Keras还可以先配置通道或最后配置通道,因此您不必更改数据。

配置keras

找到keras.json文件并更改它。该文件通常安装在C:\Users\yourusername\.keras~/.keras中,具体取决于您的操作系统。

根据需要将"image_data_format": "channels_last"更改为"channels_first",反之亦然。

通常,使用"channels_last“不那么麻烦,因为有大量的其他(非卷积)函数只在最后一个轴上工作。

定义层中的通道顺序。

Keras documentation包含有关层参数的所有信息,包括data_format参数。

票数 29
EN

Stack Overflow用户

发布于 2020-06-17 04:41:28

如果你正在寻找最快的选择,那就去找.transpose(...)吧。它甚至比np.einsum还快。

代码语言:javascript
复制
img = np.random.random((1000, 1000, 3))
img.shape
# (1000, 1000, 3)

%timeit img.transpose(2, 0, 1)
# 385 ns ± 1.11 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.rollaxis(img, -1, 0)
# 2.7 µs ± 50.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit np.einsum('ijk->kij', img)
# 2.75 µs ± 31.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit np.moveaxis(img, -1, 0)
# 7.26 µs ± 57.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

np.allclose(img.transpose(2, 0, 1), np.einsum('ijk->kij', img))
# True
np.allclose(img.transpose(2, 0, 1), np.moveaxis(img, -1, 0))
# True
np.allclose(img.transpose(2, 0, 1), np.rollaxis(img,-1, 0))
# True
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43829711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档