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

合并3张灰度图为RGB图像时仅显红蓝色的问题求助

问题原因及解决方法

核心问题:通道数据源重复

你的代码中image3和image2加载的是完全相同的文件路径:

image2 = Image.open("E:/imaging/04102022_Bronze/Oxygen_1_2/10.tif")
image3 = Image.open("E:/imaging/04102022_Bronze/Oxygen_1_2/10.tif")

这导致绿通道(索引1)和蓝通道(索引2)的像素数据完全一致。当绿、蓝通道值相同时,二者叠加会呈现青色,但如果原图像的像素特征使得青色不明显,或者你误将青色等同于蓝色,就会产生“仅显示红、蓝色”的错觉。本质是你没有真正引入第三张独立的灰度图作为蓝通道数据源。

次要优化点(不影响色彩显示,但需修正)

  • 代码中final_image=final_image=Image.fromarray(...)存在重复赋值的冗余写法,改为final_image = Image.fromarray(new_image2, mode='RGB')即可。
  • 归一化时重复调用np.array(imageX),可以优化为先转换为数组再计算,提升效率:
    image1_arr = np.array(image1)
    image1_norm = (image1_arr - image1_arr.min()) / (image1_arr.max() - image1_arr.min())
    

修正后的代码示例

from PIL import Image
import numpy as np

# 加载三张不同的灰度图
image1 = Image.open("E:/imaging/04102022_Bronze/Copper_4_2/10.tif")
image1_arr = np.array(image1)
image1_norm = (image1_arr - image1_arr.min()) / (image1_arr.max() - image1_arr.min())

image2 = Image.open("E:/imaging/04102022_Bronze/Oxygen_1_2/10.tif")
image2_arr = np.array(image2)
image2_norm = (image2_arr - image2_arr.min()) / (image2_arr.max() - image2_arr.min())

# 修正:加载第三张独立的灰度图
image3 = Image.open("E:/imaging/04102022_Bronze/[你的第三张图路径]/10.tif")
image3_arr = np.array(image3)
image3_norm = (image3_arr - image3_arr.min()) / (image3_arr.max() - image3_arr.min())

# 创建3通道数组
new_image = np.zeros(image1_arr.shape + (3,), dtype=np.float32)
new_image[:,:,0] = image1_norm  # 红通道
new_image[:,:,1] = image2_norm  # 绿通道
new_image[:,:,2] = image3_norm  # 蓝通道

# 转换为uint8格式并生成图像
new_image_uint8 = (new_image * 255).astype(np.uint8)
final_image = Image.fromarray(new_image_uint8, mode='RGB')
final_image.show()

额外检查项

如果修正路径后仍有问题,可检查:

  • 第三张灰度图是否本身像素值异常(比如全黑/全白),导致蓝通道无有效信息。
  • 确认三张图像的尺寸是否一致,如果尺寸不同,赋值通道时会报错或出现截断,需先统一尺寸。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:21:00