MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 基于Welsh算法的图像色彩迁移与自动着色系统

基于Welsh算法的图像色彩迁移与自动着色系统

资 源 简 介

本项目旨在利用MATLAB实现基于Welsh算法的图像色彩迁移功能,将一幅彩色参考图像的颜色特征智能地传输到另一幅灰度目标图像上。系统的工作流程包括首先将图像从RGB色彩空间转换到lαβ色彩空间,以有效分离亮度通道和色度通道,减少通道间的相关性。程序主要通过分析像素的亮度及其邻域标准差等纹理特征,在彩色参考图像中搜索与灰度图像像素特征最匹配的样本点,并将匹配点的色度值(α和β通道)传递给灰度图像的对应位置。该算法能够依据图像的亮度分布和纹理结构自动完成着色过程,无需复杂的人工干预,特别适用于老旧黑白照片的修复、红外图像的伪彩色处理以及图像的艺术风格化迁移。通过在MATLAB环境中利用高效的矩阵运算实现该算法,项目能够快速处理图像数据,最终将合成结果逆变换回RGB空间,生成视觉效果自然、色彩主要基调与参考图一致的彩色图像。

详 情 说 明

项目:基于Welsh算法的灰度图像色彩迁移与着色系统

项目简介

本项目是一个基于MATLAB开发的图像处理系统,旨在复现并实现Welsh等人提出的图像色彩迁移算法(Color Transfer to Greyscale Images)。该系统的核心功能是将一幅彩色参考图像(Source Image)的色彩风格智能地迁移到另一幅灰度目标图像(Target Image)上,从而实现黑白照片的自动着色或图像风格迁移。

系统通过将图像转换至Ruderman定义的$lalphabeta$色彩空间,利用亮度(Luminance)和纹理(Texture)特征在参考图像中寻找最佳匹配像素,并将对应的色度信息($alpha$和$beta$通道)传递给灰度图像,最终生成色彩自然且富有层次的彩色图像。

功能特性

  • 自动色彩迁移:无需人工标注,仅需提供一张具有相似场景或纹理的参考彩色图像,即可自动为灰度图像着色。
  • $lalphabeta$色彩空间处理:实现了RGB到$lalphabeta$色彩空间的双向转换,有效降低了通道间的相关性,使得亮度和色度可以独立处理。
  • 纹理特征匹配:结合像素的亮度值与邻域标准差(纹理特征)进行联合匹配,提高了在复杂纹理区域着色的准确性。
  • 高效分块处理:算法采用了分块(Block Processing)和向量化计算策略,并加入了进度条提示,有效控制内存占用并提升了处理大批量像素时的运行效率。
  • 特征归一化:对亮度和纹理特征进行了基于标准差的自适应归一化,确保不同量级的特征在计算欧氏距离时具有合理的权重。
  • 可视化结果对比:处理完成后自动弹出窗口,并排显示目标灰度图、参考彩色图和最终的着色结果图,便于直观评估效果。

系统要求

  • MATLAB R2016a 或更高版本(需包含 Image Processing Toolbox,用于imread, imresize, stdfilt等函数)。
  • 系统需自带标准示例图像库(cameraman.tifpeppers.png),或用户需自行准备相应格式的图像。

使用方法

  1. 确保MATLAB环境已正确安装并包含图像处理工具箱。
  2. 直接运行主程序脚本。
  3. 系统将自动加载内置的示例图像(摄影师灰度图作为目标,辣椒彩色图作为参考source)。
  4. 程序运行过程中会显示进度条,提示当前的着色进度。
  5. 运行结束后,会弹出结果窗口展示着色效果。

主要功能实现逻辑

本项目的主程序严格遵循Welsh算法的标准流程,结合了MATLAB的矩阵运算优势,具体实现步骤如下:

1. 数据准备与预处理

程序首先清空环境,并加载MATLAB内置的灰度图像(cameraman.tif)和彩色图像(peppers.png)。为了保证算法运行效率,系统强制将两幅图像调整为统一的尺寸(256x256像素),并将数据类型转换为双精度浮点型(double),范围归一化至[0, 1]。如果目标图像是RGB格式,会自动转换为灰度图;如果参考图像非彩色,程序将报错终止。

2. 色彩空间转换

系统利用自定义函数实现了从RGB空间到Ruderman定义的$lalphabeta$色彩空间的转换。
  • 彩色参考图:被完整分解为 $l$(亮度)、$alpha$(黄-蓝通道)、$beta$(红-绿通道)。
  • 灰度目标图:仅作为亮度通道 $l$ 输入。虽然在代码层面上构建了三通道输入,但转换后仅保留 $l$ 通道用于后续的特征匹配,$alpha$ 和 $beta$ 通道待填充。

3. 特征提取

为了在参考图中找到与灰度图像素最相似的点,程序提取了两种关键特征:
  • 亮度特征:直接使用 $l$ 通道的像素值。
  • 纹理特征:计算 $l$ 通道在 $5 times 5$ 邻域内的标准差。程序使用 stdfilt 滤波函数高效计算局部纹理复杂度,用于区分平滑区域(如天空)和复杂纹理区域(如树木、织物)。

4. 样本选择

为了减少计算量并提取具有代表性的颜色样本,程序采用随机采样策略。从参考图像的所有像素中随机抽取200个像素点作为样本集。这些样本点记录了其亮度、色度($alpha, beta$)以及纹理特征,构成了色彩查找表。

5. 色彩匹配与迁移(核心算法)

这是程序最耗时的部分,实现了基于特征距离的最近邻搜索:
  • 特征归一化:计算样本集亮度和纹理的标准差,并利用该统计量对源图像和目标图像的特征向量进行归一化,消除量纲差异,确保使用欧氏距离进行匹配时的公平性。
  • 分块处理:为了防止生成巨大的距离矩阵导致内存溢出,程序将目标图像的所有像素平铺后,按4096个像素为一个块(Block)进行循环处理。
  • 最近邻搜索:对于每一个目标像素,计算其特征向量([归一化亮度, 归一化纹理])与所有200个参考样本特征向量之间的欧氏距离。
  • 色度传递:找到距离最小的那个样本点,将其 $alpha$ 和 $beta$ 值直接赋值给目标像素。

6. 图像重构与显示

匹配完成后,目标图像拥有了原始的 $l$ 通道和新生成的 $alpha$、$beta$ 通道。程序调用逆变换函数,将数据从 $lalphabeta$ 空间转换回 RGB 空间。最后,对超出 [0, 1] 范围的数值进行截断处理,并使用 subplot 并排显示处理前后的对比结果。

关键算法与函数分析

rgb2lab_welsh

实现RGB到$lalphabeta$空间的转换。该过程包含两个步骤:
  1. RGB -> LMS:通过线性矩阵变换将RGB转换为LMS锥体响应空间,并进行对数变换(Log10),模拟人类视觉对光强的对数感知特性。
  2. LMS -> lαβ:通过Ruderman提出的正交去相关矩阵,将LMS信号转换为三个不相关的分量(亮度、黄蓝差、红绿差)。

lab2rgb_welsh

实现上述过程的逆变换。包括从$lalphabeta$到LMS的矩阵逆变换,指数还原($10^x$),以及从LMS回到RGB空间的矩阵变换。

compute_texture

纹理特征提取函数。通过计算图像局部邻域(默认为5x5窗口)内的标准差来量化纹理。标准差越大,表示该区域纹理越复杂(如边缘、噪点);标准差越小,表示区域越平滑。

select_samples

样本筛选函数。本实现使用了 randperm 生成随机索引,从参考图像中均匀随机地选取指定数量(如200个)的像素点。这种方法简单且能较好地覆盖参考图的整体色彩分布,避免了全像素搜索带来的巨大计算开销。