簡體   English   中英

在圖像頂部的熱圖

[英]Heatmap on top of image

我有不同對象的圖像(Pascal Voc),我有一個概率熱圖。 我想通過繪制圖像以及在它上面以某種方式繪制熱圖來可視化它。 最好的方法是什么?

我正在考慮像這樣使用alpha通道:

im_heat = np.zeros((image.shape[0],image.shape[1],4))
im_heat[:,:,:3] = image
im_heat[:,:,3] = np.rint(255/heatmap)
plt.imshow(im_heat, cmap='jet')
plt.colorbar()

如何自定義顏色條從最小(熱圖)到最大(熱圖)? 或者有沒有更好的方法可視化概率?

您可以使用matplotlib堆疊圖像和繪圖,然后選擇要用於顏色欄的句柄。 使用contourf的最小值和最大值將基於熱圖(或者您可以將vmin=min(heatmap)vmax=max(heatmap)傳遞給contourf,以明確該范圍)。 這個問題是熱圖將覆蓋你的圖像(設置透明度將使整個事物透明)。 最好的選擇是制作一個在接近零時透明的色彩圖,如下所示,

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import Image

#2D Gaussian function
def twoD_Gaussian((x, y), xo, yo, sigma_x, sigma_y):
    a = 1./(2*sigma_x**2) + 1./(2*sigma_y**2)
    c = 1./(2*sigma_x**2) + 1./(2*sigma_y**2)
    g = np.exp( - (a*((x-xo)**2) + c*((y-yo)**2)))
    return g.ravel()


def transparent_cmap(cmap, N=255):
    "Copy colormap and set alpha values"

    mycmap = cmap
    mycmap._init()
    mycmap._lut[:,-1] = np.linspace(0, 0.8, N+4)
    return mycmap


#Use base cmap to create transparent
mycmap = transparent_cmap(plt.cm.Reds)


# Import image and get x and y extents
I = Image.open('./deerback.jpg')
p = np.asarray(I).astype('float')
w, h = I.size
y, x = np.mgrid[0:h, 0:w]

#Plot image and overlay colormap
fig, ax = plt.subplots(1, 1)
ax.imshow(I)
Gauss = twoD_Gaussian((x, y), .5*x.max(), .4*y.max(), .1*x.max(), .1*y.max())
cb = ax.contourf(x, y, Gauss.reshape(x.shape[0], y.shape[1]), 15, cmap=mycmap)
plt.colorbar(cb)
plt.show()

這使,

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM