4. 彩色图像通道分离与合并

彩色图像通道分离与合并 学习卡片

任务说明与对象

本案例以一张24位彩色图像为对象,完成“分离→单通道处理→合并”的完整链路。核心算子是 decompose3(分离)与 compose3(合并),中间对某一通道做增强或阈值处理,最后对比处理前后的彩色效果。

关键算子与数据流

算子作用输入输出
read_image读取彩色图像文件路径Image(3通道)
decompose3拆分为三个单通道ImageR, G, B
compose3按R,G,B顺序合并R, G, BImage(3通道)

数据流:Image → decompose3 → (R,G,B) → 处理 → compose3 → Image'。注意 compose3 的参数顺序固定为红、绿、蓝,顺序写错会导致颜色错乱。

完整可运行代码

* 彩色图像通道分离与合并
* 读取彩色图像(示例路径,请替换为本地实际图像)
read_image (Image, 'color_parts.png')
get_image_size (Image, Width, Height)

* 1. 分离为 R、G、B 三个通道
decompose3 (Image, R, G, B)

* 2. 对红色通道做增强处理:灰度拉伸到更宽范围
*    先取红色通道的灰度范围,再线性映射
min_max_gray (R, R, 0, MinR, MaxR, RangeR)
if (MaxR > MinR)
    scale_image (R, REnhanced, 255.0 / (MaxR - MinR), -MinR * 255.0 / (MaxR - MinR))
else
    copy_image (R, REnhanced)
endif

* 3. 对绿色通道做阈值分割,得到区域后用于观察
threshold (G, RegionG, 100, 255)

* 4. 用增强后的红色通道与原 G、B 合并
compose3 (REnhanced, G, B, ImageEnhanced)

* 5. 生成对比:原图与增强图并排显示
dev_display (Image)
dev_display (ImageEnhanced)

* 6. 单独显示三个通道,便于观察各通道贡献
dev_display (R)
dev_display (G)
dev_display (B)

操作过程与结果判读

  1. 运行后先观察 R、G、B 三幅单通道图:它们都是灰度图,亮暗反映该颜色分量强弱。例如红色物体在 R 通道中偏亮,在 B 通道中偏暗。
  2. 对比 Image 与 ImageEnhanced:由于只增强了红色通道,图像整体应偏红或红色区域更突出,而绿色、蓝色分量保持不变。
  3. 若把 compose3 的参数顺序改为 compose3 (B, G, R, ...),会得到颜色反转的错误结果,这是验证通道顺序重要性的直接方法。
  4. threshold 得到的 RegionG 可用于确认绿色通道中哪些区域灰度超过100,属于中间处理结果的验证手段。

验证与通过条件

  • decompose3 输出的三幅图尺寸与 Width×Height 一致,且均为单通道。
  • compose3 合并后图像恢复为3通道,尺寸不变。
  • 仅修改红色通道时,合并结果中绿色、蓝色分量与原图对应通道逐像素一致(可用 access_channel 取出验证)。
  • 若 MaxR == MinR(红色通道为纯色),代码走 copy_image 分支,不产生除零错误。

常见问题

通道顺序错误是最常见问题,务必记住 compose3 为 R、G、B。若图像是灰度图,decompose3 会失败,需先用 count_channels 判断通道数。处理单通道时不要误用只适用于三通道的算子(如 rgb1_to_gray)。