You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SAM生成的显著性图转化为目标绿色热力图效果?

显著性热力图优化问题

我正在开展显著性图像预测工作,采用GitHub仓库marcellacornia/sam进行开发。模型输出显著性图后,我希望将其转化为叠加在原图上的热力图,尝试了以下代码,但得到的红色热力图效果未达预期,希望优化成类似目标绿色热力图的效果,附上相关图片,恳请指出问题并提供改进建议。

相关图片

  • 我的结果:我的结果
  • 显著性图:显著性图
  • 预期结果:预期结果
  • 原图:原图

现有实现代码

import cv2
import numpy as np
image1 = cv2.imread("Source.jpeg")
image2=cv2.imread("Saliency.png")
heatmap = cv2.applyColorMap(image2, cv2.COLORMAP_HOT)
weight = cv2.addWeighted(image1,0.5, heatmap ,0.8 ,0.3)
cv2.imshow("Result",weight )

问题分析与改进建议

核心问题

  1. 颜色映射选错了:你用的cv2.COLORMAP_HOT是红黄色系,和预期的绿色系完全不匹配。
  2. 显著性图没预处理:模型输出的显著性图可能像素值范围不是标准的0-255,直接用颜色映射会导致颜色失真;如果是三通道图,也会干扰映射效果。
  3. 叠加权重不合理:当前热力图权重(0.8)远高于原图(0.5),会盖掉原图细节,加上0.3的亮度偏移,整体画面偏亮。

具体改进步骤

  1. 换绿色系颜色映射:直接用cv2.COLORMAP_GREEN就能得到绿色系热力图,和预期效果匹配;如果觉得默认绿色不够贴合,可以手动自定义渐变颜色表。
  2. 预处理显著性图:
    • 先转成单通道灰度图:如果读入的显著性图是三通道,执行image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
    • 归一化到0-255范围:image2 = cv2.normalize(image2, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U),保证颜色映射均匀
  3. 调整叠加权重:降低热力图权重,让原图细节保留更清晰,比如设置原图权重0.7、热力图权重0.3,亮度偏移设为0:weight = cv2.addWeighted(image1, 0.7, heatmap, 0.3, 0)
  4. 可选增强:对显著性图做直方图均衡,突出核心显著区域:image2 = cv2.equalizeHist(image2)

改进后的示例代码

import cv2
import numpy as np

# 读取图像
image1 = cv2.imread("Source.jpeg")
image2 = cv2.imread("Saliency.png")

# 预处理显著性图:转灰度+归一化
if len(image2.shape) == 3:
    image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
image2 = cv2.normalize(image2, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)
# 可选:增强显著区域对比度
image2 = cv2.equalizeHist(image2)

# 使用绿色系颜色映射
heatmap = cv2.applyColorMap(image2, cv2.COLORMAP_GREEN)

# 调整叠加权重,保留原图细节
weight = cv2.addWeighted(image1, 0.7, heatmap, 0.3, 0)

cv2.imshow("Result", weight)
cv2.waitKey(0)
cv2.destroyAllWindows()

内容的提问来源于stack exchange,提问作者Wareesha Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:50:37