4. 彩色图像通道分离与合并
任务说明与对象
本案例以一张24位彩色图像为对象,完成“分离→单通道处理→合并”的完整链路。核心算子是 decompose3(分离)与 compose3(合并),中间对某一通道做增强或阈值处理,最后对比处理前后的彩色效果。
关键算子与数据流
| 算子 | 作用 | 输入 | 输出 |
|---|---|---|---|
read_image | 读取彩色图像 | 文件路径 | Image(3通道) |
decompose3 | 拆分为三个单通道 | Image | R, G, B |
compose3 | 按R,G,B顺序合并 | R, G, B | Image(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)
操作过程与结果判读
- 运行后先观察
R、G、B三幅单通道图:它们都是灰度图,亮暗反映该颜色分量强弱。例如红色物体在 R 通道中偏亮,在 B 通道中偏暗。 - 对比
Image与ImageEnhanced:由于只增强了红色通道,图像整体应偏红或红色区域更突出,而绿色、蓝色分量保持不变。 - 若把
compose3的参数顺序改为compose3 (B, G, R, ...),会得到颜色反转的错误结果,这是验证通道顺序重要性的直接方法。 threshold得到的RegionG可用于确认绿色通道中哪些区域灰度超过100,属于中间处理结果的验证手段。
验证与通过条件
decompose3输出的三幅图尺寸与Width×Height一致,且均为单通道。compose3合并后图像恢复为3通道,尺寸不变。- 仅修改红色通道时,合并结果中绿色、蓝色分量与原图对应通道逐像素一致(可用
access_channel取出验证)。 - 若
MaxR == MinR(红色通道为纯色),代码走copy_image分支,不产生除零错误。
常见问题
通道顺序错误是最常见问题,务必记住 compose3 为 R、G、B。若图像是灰度图,decompose3 会失败,需先用 count_channels 判断通道数。处理单通道时不要误用只适用于三通道的算子(如 rgb1_to_gray)。