gpt4 book ai didi

python - Numpy - 如何从 4 个输入图像构建一个新图像,选择最亮的像素 (max(R+G+B))

转载 作者:行者123 更新时间:2023-12-02 16:19:21 24 4
gpt4 key购买 nike

有四个像这样的图像数组:

image1 = np.array([
[
# [R G B]
# | | |
[1, 2, 3], [11, 22, 55], [12, 45, 56]
],
[
[1, 2, 3], [56, 55, 13], [12, 45, 56]
],
[
[11, 22, 55], [56, 55, 13], [12, 45, 56]
],
])

image2 = np.array([
[
[91, 72, 33], [111, 222, 155], [212, 245, 156]
],
[
[100, 200, 113], [56, 255, 213], [112, 145, 156]
],
[
[113, 223, 255], [156, 55, 113], [212, 245, 156]
],
])

image3 = np.array([
[
[9, 2, 3], [111, 222, 255], [22, 25, 16]
],
[
[10, 20, 13], [156, 25, 23], [12, 45, 16]
],
[
[13, 23, 155], [56, 255, 13], [222, 235, 216]
],
])

image4 = np.array([
[
[29, 22, 23], [111, 222, 255], [223, 125, 216]
],
[
[210, 220, 13], [156, 252, 232], [122, 145, 216]
],
[
[123, 232, 155], [56, 255, 213], [222, 235, 216]
],
])

对于每一行和每一列,我想计算图像数组的 Red & Green & Blue channel 之和的最大 RGB 值,并使用最大值来构建一个新的图像数组。

所以在尝试了下面的代码之后,它得到了重复的索引,因为在每一行和每一列中,三个图像数组的最大 RGB 可能是重复的。但我只想获取第一个匹配索引。

array = np.array([image1, image2, image3, image4])
array_sum = array.sum(axis=3)
# array_sum_max_index = array_sum.argmax(axis=0)
indices = np.where(array_sum == array_sum.max(axis=0))
print(indices)

输出

(array([1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3]), array([0, 0, 2, 0, 2, 0, 1, 1, 1, 2, 2]), array([0, 2, 0, 1, 2, 1, 0, 1, 2, 1, 2]))

这个link里面也有类似的回答,但它不能解决我的问题。那么第一次匹配时如何获取索引。

编辑:

实际输入图片数量超过32。 (涉及 numpy.choose() 的解决方案可能因此无法工作)

最佳答案

(提出不使用 numpy.choose() 的替代解决方案,因为 OP 已经指出 32 选择数组的约束在 的情况下numpy.choose() 是一个问题)

array = np.array([image1, image2, image3, image4])
array_sum = array.sum(axis=3)
array_sum_max_index = array_sum.argmax(axis=0)

m = 3 # Number of pixel rows
n = 3 # Number of pixel columns

array[array_sum_max_index, np.arange(m)[:,None,], np.arange(n)[None,:]]

输出:

array([[[ 91,  72,  33],
[111, 222, 255],
[212, 245, 156]],

[[210, 220, 13],
[156, 252, 232],
[122, 145, 216]],

[[113, 223, 255],
[ 56, 255, 213],
[222, 235, 216]]])

关于python - Numpy - 如何从 4 个输入图像构建一个新图像,选择最亮的像素 (max(R+G+B)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65898526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com