如何用Numpy和Matplotlib叠加SEM显微镜图像?
SEM图像与元素分布图像的叠加实现方案
以下是基于Numpy和Matplotlib的具体实现步骤,针对你已读取的图像数组进行处理:
1. 预处理:统一图像尺寸与归一化
首先确保三张图像尺寸一致(元素图可能与SEM图尺寸不同),并将元素灰度图归一化到0-1区间,方便后续叠加控制:
import numpy as np import matplotlib.pyplot as plt from PIL import Image # 你已完成的图像读取步骤 image_SEM = np.asarray(Image.open('Project_SEI.JPG')) image_Al = np.asarray(Image.open('Project_Al K.JPG')) image_Si = np.asarray(Image.open('Project_Si K.JPG')) # 统一图像尺寸(以SEM图为基准) target_height, target_width = image_SEM.shape[:2] # PIL的resize参数为(width, height),所以反转尺寸顺序 image_Al_resized = np.asarray(Image.fromarray(image_Al).resize((target_width, target_height))) image_Si_resized = np.asarray(Image.fromarray(image_Si).resize((target_width, target_height))) # 归一化元素图到0-1区间,消除不同图像的亮度差异 image_Al_norm = (image_Al_resized - image_Al_resized.min()) / (image_Al_resized.max() - image_Al_resized.min()) image_Si_norm = (image_Si_resized - image_Si_resized.min()) / (image_Si_resized.max() - image_Si_resized.min())
2. 两种叠加实现方式
方式一:彩色通道混合叠加
将Al元素映射为红色通道、Si元素映射为绿色通道,与SEM图按比例混合,直观区分元素分布:
# 创建与SEM图同尺寸的彩色叠加层 overlay = np.zeros_like(image_SEM, dtype=np.float32) overlay[..., 0] = image_Al_norm # 红色对应Al元素分布 overlay[..., 1] = image_Si_norm # 绿色对应Si元素分布 # 将SEM图转换为浮点型并归一化到0-1 sem_normalized = image_SEM.astype(np.float32) / 255.0 # 调整叠加透明度(alpha值0-1,0为仅显示SEM,1为仅显示元素层) alpha = 0.5 mixed_image = (1 - alpha) * sem_normalized + alpha * overlay # 确保像素值在合法范围内 mixed_image = np.clip(mixed_image, 0, 1) # 显示结果 plt.figure(figsize=(10, 8)) plt.imshow(mixed_image) plt.title('SEM + Al(Red) + Si(Green) Overlay') plt.axis('off') plt.show()
方式二:多图层直接叠加
利用Matplotlib的图层叠加特性,直接在SEM图上叠加不同配色的元素灰度图:
plt.figure(figsize=(10, 8)) # 底图显示SEM图像 plt.imshow(image_SEM) # 叠加Al元素图,使用红色配色,设置透明度 plt.imshow(image_Al_resized, cmap='Reds', alpha=0.5) # 叠加Si元素图,使用绿色配色,设置透明度 plt.imshow(image_Si_resized, cmap='Greens', alpha=0.5) plt.title('SEM Image with Element Distribution Overlay') plt.axis('off') plt.show()
注意事项
- 如果元素图的背景为高亮度(而非低亮度),可以通过
1 - image_Al_norm反转归一化后的数值,让元素富集区域显示为对应颜色 - alpha值可根据实际图像的对比度调整,以平衡SEM细节和元素分布的可见性
内容的提问来源于stack exchange,提问作者Giovanni Pignatelli
相关产品推荐
相关产品推荐

