如何从四个或更多灰度图像中识别出激活最高的像素并保存为最终的热图?

Posted

技术标签:

【中文标题】如何从四个或更多灰度图像中识别出激活最高的像素并保存为最终的热图?【英文标题】:How to identify the pixels with the highest activation from four or more grayscale images and save as the final heatmap? 【发布时间】:2022-01-05 16:26:26 【问题描述】:

我有四个注意力图,每个维度为 217 x 217,格式为 float64 数组。我需要使用这些注意力图执行操作并保存最终的注意力图,其中仅存在具有最高激活的像素。在这方面需要一个自定义函数。附上热图:

起始代码在这里:

import cv2
import numpy as np
import os
from PIL import Image

im1 = np.array(Image.open("heatmap1.png").convert('L'))
im2 = np.array(Image.open("heatmap2.png").convert('L'))
im3 = np.array(Image.open("heatmap3.png").convert('L'))
im4 = np.array(Image.open("heatmap4.png").convert('L'))

#compute to save only the pixels with the highest activation

#save final heatmap as a PNG file
cv2.imwrite("final_heatmap.png", bitwise_AND)

【问题讨论】:

@CrisLuengo:是的,我希望像素最大值出现在最终图像中。 堆叠它们,然后 np.max(axis=...) 为什么您的问题中的代码提到“按位与”? 【参考方案1】:

要计算两个图像之间的像素最大值,请使用np.maximum(im1, im2)。按位逻辑与仅给出布尔值的最大值,但不能推广到灰度值。

要找到四个图像的像素最大值,请使用带有成对运算符的金字塔方案:

out1 = np.maximum(im1, im2)
out2 = np.maximum(im3, im4)
out = np.maximum(out1, out2)

如果您愿意覆盖输入,则可以更有效地执行上述操作:

np.maximum(im1, im2, out=im1)
np.maximum(im3, im4, out=im3)
np.maximum(im1, im3, out=im1)  # im1 now has the result

【讨论】:

【参考方案2】:

你可以使用numpy的内置函数

logical_and
bitwise_or
bitwise_xor
binary_repr

示例用法如下

np.bitwise_and(arr1, arr2)

【讨论】:

带有附加图像的工作脚本会很棒。

以上是关于如何从四个或更多灰度图像中识别出激活最高的像素并保存为最终的热图?的主要内容,如果未能解决你的问题,请参考以下文章

从图像中识别出多个局部的物体 —— MS COCO

如何在Swift中识别出强大的参考周期?

13:图像模糊处理

二进制图片如何转化为值

使用OpenCV如何获取图像每个像素的灰度值??

Elasticsearch实战 | 如何从数千万手机号中识别出情侣号?