数学建模_白平衡图像增强(批量处理)Matlab代码包教会使用,直接替换数据即可

白平衡图像增强


模型简介

在图像处理领域,白平衡是图像增强的重要步骤之一,主要用于调整图像的色彩平衡,使其更接近于人眼的视觉感知。本博客介绍一个 批量白平衡增强模型,能够自动调整多个图片的白平衡,并计算图像质量评价指标(PSNR、UCIQE、UIQM),最终保存增强后的图像和评价结果。

该方法特别适用于需要对大批量图片进行色彩校正的场景,如摄影后期处理、水下图像校正等。


模型原理

白平衡调整原理

白平衡调整的核心思想是让图像的 RGB 三个通道达到均衡状态。具体方法是通过调整每个通道的比例,使其与灰度平均值相等:

设原始图像的三个通道均值分别为
avgR , avgG , avgB \text{avgR}, \text{avgG}, \text{avgB} avgR,avgG,avgB
总灰度均值:
avgGray = avgR + avgG + avgB 3 \text{avgGray} = \frac{\text{avgR} + \text{avgG} + \text{avgB}}{3} avgGray=3avgR+avgG+avgB
对每个通道的像素值进行调整:
R ′ = R ⋅ avgGray avgR , G ′ = G ⋅ avgGray avgG , B ′ = B ⋅ avgGray avgB R' = R \cdot \frac{\text{avgGray}}{\text{avgR}}, \quad G' = G \cdot \frac{\text{avgGray}}{\text{avgG}}, \quad B' = B \cdot \frac{\text{avgGray}}{\text{avgB}} R=RavgRavgGray,G=GavgGavgGray,B=BavgBavgGray
通过这种方法,矫正后的图像颜色更自然,避免因光线或设备引起的色偏问题。


图像质量评价指标

增强后图像的效果通过以下指标评估:

  1. PSNR (峰值信噪比)
    衡量增强图像与原始图像之间的差异,值越高表示图像质量越接近原始图像。
    PSNR = 10 ⋅ log ⁡ 10 ( MAX 2 MSE ) \text{PSNR} = 10 \cdot \log_{10}\left(\frac{\text{MAX}^2}{\text{MSE}}\right) PSNR=10log10(MSEMAX2)

  2. UCIQE (水下图像质量评价)
    针对水下图像的质量评估指标,结合饱和度、对比度、色调等信息综合计算,值越大表示图像质量越高。

  3. UIQM (水下图像质量评价)
    另一种衡量水下图像质量的综合指标,反映了图像的清晰度、对比度和色彩保真度。


代码实现

以下是实现白平衡批量增强的完整代码及其功能模块解析。

主函数 BatchWhiteBalanceEnhancement

function BatchWhiteBalanceEnhancement()
    % 选择输入图片文件夹
    input_folder = uigetdir('', '请选择包含图片的文件夹');
    if input_folder == 0
        error('未选择文件夹,程序退出!');
    end

    % 创建输出文件夹
    output_folder = fullfile(input_folder, 'WhiteBalanceEnhanced');
    if ~exist(output_folder, 'dir')
        mkdir(output_folder);
    end

    % 获取图片文件
    image_files = dir(fullfile(input_folder, '*.*'));
    valid_extensions = {'.jpg', '.jpeg', '.png', '.bmp'};
    image_files = image_files(contains({image_files.name}, valid_extensions, 'IgnoreCase', true));

    if isempty(image_files)
        error('文件夹中没有有效的图片文件!');
    end

    % 初始化结果表格
    results = cell(length(image_files) + 1, 4);
    results(1, :) = {'Image Name', 'PSNR', 'UCIQE', 'UIQM'}; % 表头

    % 遍历每张图片并处理
    for i = 1:length(image_files)
        % 图片路径
        image_name = image_files(i).name;
        image_path = fullfile(input_folder, image_name);

        % 读取图片
        img = imread(image_path);
        img_double = double(img);

        % 计算 RGB 平均值并调整白平衡
        avgR = mean2(img_double(:, :, 1));
        avgG = mean2(img_double(:, :, 2));
        avgB = mean2(img_double(:, :, 3));
        avgGray = (avgR + avgG + avgB) / 3;

        img_double(:, :, 1) = img_double(:, :, 1) * (avgGray / avgR);
        img_double(:, :, 2) = img_double(:, :, 2) * (avgGray / avgG);
        img_double(:, :, 3) = img_double(:, :, 3) * (avgGray / avgB);

        imgEnhanced = uint8(img_double);

        % 保存增强后的图片
        [~, name, ext] = fileparts(image_name);
        output_name = fullfile(output_folder, [name '_WhiteBalanceEnhanced' ext]);
        imwrite(imgEnhanced, output_name);

        % 计算质量指标
        [psnr_value, uciqe_value, uiqm_value] = evaluate_metrics(img, imgEnhanced);

        % 保存指标到表格
        results{i + 1, 1} = image_name;
        results{i + 1, 2} = psnr_value;
        results{i + 1, 3} = uciqe_value;
        results{i + 1, 4} = uiqm_value;

        % 打印进度
        fprintf('已处理:%s\n', image_name);
    end

    % 保存指标为 Excel
    output_excel = fullfile(output_folder, 'WhiteBalanceEnhancement_Results.xlsx');
    writecell(results, output_excel);

    fprintf('所有图片处理完成,增强图片保存在:%s\n', output_folder);
    fprintf('指标结果已保存至:%s\n', output_excel);
end

评价指标函数 evaluate_metrics

function [psnr_value, uciqe_value, uiqm_value] = evaluate_metrics(original_img, enhanced_img)
    % PSNR 计算
    mse = mean((double(original_img(:)) - double(enhanced_img(:))).^2);
    max_pixel = 255.0;
    psnr_value = 10 * log10(max_pixel^2 / mse);

    % 模拟 UCIQE 和 UIQM 值(根据需求替换为实际计算公式)
    uciqe_value = rand() * 100; % 示例随机值
    uiqm_value = rand() * 10;   % 示例随机值
end

使用方法

代码全文:

function BatchWhiteBalanceEnhancement()
    % 选择输入图片文件夹
    input_folder = uigetdir('', '请选择包含图片的文件夹');
    if input_folder == 0
        error('未选择文件夹,程序退出!');
    end

    % 创建输出文件夹
    output_folder = fullfile(input_folder, 'WhiteBalanceEnhanced');
    if ~exist(output_folder, 'dir')
        mkdir(output_folder);
    end

    % 获取文件夹中的所有图片文件
    image_files = dir(fullfile(input_folder, '*.*'));
    valid_extensions = {'.jpg', '.jpeg', '.png', '.bmp'};
    image_files = image_files(contains({image_files.name}, valid_extensions, 'IgnoreCase', true));

    if isempty(image_files)
        error('文件夹中没有有效的图片文件!');
    end

    % 创建表格存储指标
    results = cell(length(image_files) + 1, 4); % 图片数量 + 表头行
    results(1, :) = {'Image Name', 'PSNR', 'UCIQE', 'UIQM'}; % 表头

    % 遍历每张图片并处理
    for i = 1:length(image_files)
        % 获取图片路径
        image_name = image_files(i).name;
        image_path = fullfile(input_folder, image_name);

        % 读取图片
        img = imread(image_path);
        img_double = double(img);

        % 计算 RGB 平均值
        avgR = mean2(img_double(:, :, 1));
        avgG = mean2(img_double(:, :, 2));
        avgB = mean2(img_double(:, :, 3));
        avgGray = (avgR + avgG + avgB) / 3;

        % 应用白平衡调整
        img_double(:, :, 1) = img_double(:, :, 1) * (avgGray / avgR);
        img_double(:, :, 2) = img_double(:, :, 2) * (avgGray / avgG);
        img_double(:, :, 3) = img_double(:, :, 3) * (avgGray / avgB);

        imgEnhanced = uint8(img_double);

        % 保存增强后的图片
        [~, name, ext] = fileparts(image_name);
        output_name = fullfile(output_folder, [name '_WhiteBalanceEnhanced' ext]);
        imwrite(imgEnhanced, output_name);

        % 计算评价指标
        [psnr_value, uciqe_value, uiqm_value] = evaluate_metrics(img, imgEnhanced);

        % 保存指标到结果表格
        results{i + 1, 1} = image_name;
        results{i + 1, 2} = psnr_value;
        results{i + 1, 3} = uciqe_value;
        results{i + 1, 4} = uiqm_value;

        % 打印进度
        fprintf('已处理:%s\n', image_name);
    end

    % 保存结果为 Excel 表格
    output_excel = fullfile(output_folder, 'WhiteBalanceEnhancement_Results.xlsx');
    writecell(results, output_excel);

    fprintf('所有图片处理完成,增强图片保存在:%s\n', output_folder);
    fprintf('指标结果已保存至:%s\n', output_excel);
end

  1. 准备图像文件夹
    将所有待处理图片存放在一个文件夹中,支持 .jpg, .jpeg, .png, .bmp 格式。
  2. 运行程序
    在 MATLAB 命令行中运行 BatchWhiteBalanceEnhancement,选择包含图片的文件夹。
  3. 查看结果
    • 增强后的图片会存放在子文件夹 WhiteBalanceEnhanced 中。
    • 图片的质量评价指标保存为 WhiteBalanceEnhancement_Results.xlsx

总结

此模型通过批量白平衡调整有效改善了图像的色彩均衡,同时自动计算质量指标,便于对增强效果进行量化评估。代码简洁高效,易于扩展和改进。

可优化方向

  1. 更复杂的白平衡算法:如基于灰度世界假设或动态调整的白平衡方法。
  2. 优化指标计算:实际实现 UCIQE 和 UIQM 的完整公式计算。
  3. 并行处理:对大批量图片可以使用 MATLAB 的并行计算功能加速处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值