求推荐工具:在图像熵密度图上叠加PNG/JPG格式RGB图像
解决方案
Python 实现方案
用Pillow处理图像、numpy计算局部熵、matplotlib完成绘图叠加,步骤如下:
- 读取图像并转为灰度图(熵计算通常基于单通道)
- 用滑动窗口计算每个像素区域的局部熵
- 绘制熵值的热力密度图
- 将原图以半透明方式叠加在密度图上
示例代码:
import numpy as np from PIL import Image import matplotlib.pyplot as plt from scipy.ndimage import generic_filter def calculate_entropy(window): # 计算窗口内像素的熵 hist, _ = np.histogram(window, bins=256, range=(0,255)) prob = hist[hist > 0] / window.size return -np.sum(prob * np.log2(prob)) # 读取图像 img = Image.open("your_image.jpg").convert("L") img_array = np.array(img) # 计算局部熵(窗口大小设为11x11,可按需调整) entropy_map = generic_filter(img_array, calculate_entropy, size=11) # 绘图 fig, ax = plt.subplots(figsize=(10,10)) # 绘制熵值密度图 ax.imshow(entropy_map, cmap="inferno", alpha=0.7) # 叠加原图(调整透明度alpha) ax.imshow(img_array, cmap="gray", alpha=0.3) ax.axis("off") plt.savefig("entropy_overlay.png", dpi=300, bbox_inches="tight") plt.show()
R 实现方案
用imager处理图像、entropy包计算熵、ggplot2完成叠加,步骤如下:
- 读取图像并转为灰度图
- 定义滑动窗口函数计算局部熵
- 绘制熵值热力图,叠加原图
示例代码:
library(imager) library(entropy) library(ggplot2) # 读取图像并转为灰度 img <- load.image("your_image.jpg") %>% grayscale() img_array <- as.array(img) # 计算局部熵的函数 calc_local_entropy <- function(window) { hist <- table(window) entropy::entropy(hist, method="ml") } # 用滑动窗口计算熵(窗口大小5x5,可调整) entropy_map <- imager::map_outer(img, f=calc_local_entropy, window.size=5) # 转为数据框用于ggplot绘图 entropy_df <- as.data.frame(entropy_map) img_df <- as.data.frame(img) # 绘图叠加 ggplot() + geom_raster(data=entropy_df, aes(x=x, y=y, fill=value)) + scale_fill_viridis_c(option="inferno") + geom_raster(data=img_df, aes(x=x, y=y, alpha=value), fill="gray") + scale_alpha(range=c(0.2, 0.4)) + coord_fixed() + theme_void() + theme(legend.position="none") ggsave("entropy_overlay_r.png", dpi=300, bg="white")
补充说明
- 窗口大小可根据图像分辨率和需求调整,窗口越大熵值越平滑,越小越精细
- 透明度参数(
alpha)可按需调整,平衡密度图和原图的可见性 - 如果处理大量图像,可将代码封装为函数,批量循环处理
内容的提问来源于stack exchange,提问作者maracuja
相关产品推荐
相关产品推荐

