如何从4张及以上灰度注意力图提取最高激活像素生成最终热力图
最高激活注意力图生成实现方案
现有4张217×217的输入热力图如下:



实现逻辑
- 逐像素对比4张图同一位置的激活值,仅保留最大值作为最终图对应位置的数值,保证最终图每个位置都是所有输入中激活最高的结果
- 兼容原生float64数组输入和png图片读取两种场景
完整实现代码
import cv2 import numpy as np from PIL import Image # 读取png格式热力图得到灰度数组,若已有原生float64注意力数组可跳过本步,直接将四个数组存入im_list 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')) im_list = [im1, im2, im3, im4] # 核心计算:堆叠所有数组后沿输入维度取逐像素最大值 final_heatmap = np.max(np.stack(im_list, axis=0), axis=0) # 可选步骤:若需要输出可视化png图,对float64数组做归一化转uint8 # final_heatmap = ((final_heatmap - final_heatmap.min()) / (final_heatmap.max() - final_heatmap.min()) * 255).astype(np.uint8) # 保存结果,若要保留原始float64精度可改用np.save("final_heatmap.npy", final_heatmap) cv2.imwrite("final_heatmap.png", final_heatmap)
内容的提问来源于stack exchange,提问作者shiva
相关产品推荐
相关产品推荐

