当前位置: 首页 > news >正文

自适应全变分模型的图像平滑去噪与边缘保留算法

使用MATLAB实现的基于自适应全变分(Adaptive Total Variation, ATV)模型的图像平滑去噪与边缘保留算法。该模型通过自适应调整正则化参数,在平滑区域增强去噪效果,同时在边缘区域减少平滑以保留细节。

function denoised_image = adaptive_tv_denoise(noisy_img, lambda0, k, n_iter, dt, epsilon)
% 参数说明:
%   noisy_img: 噪声图像 (灰度图像)
%   lambda0: 全局正则化参数 (建议值: 0.05~0.2)
%   k: 边缘敏感参数 (建议值: 0.01~0.1)
%   n_iter: 迭代次数 (建议值: 50~200)
%   dt: 时间步长 (建议值: 0.01~0.05)
%   epsilon: 避免除零的小常数 (默认: 1e-6)if nargin < 6epsilon = 1e-6;
end% 初始化输出图像
u = double(noisy_img);% 计算噪声图像的梯度 (用于自适应参数)
[Gx, Gy] = forward_gradient(noisy_img);
G_mag = sqrt(Gx.^2 + Gy.^2);% 计算自适应正则化参数图 (边缘处值小,平滑区域值大)
lambda_map = lambda0 ./ (1 + (G_mag.^2) / k^2);% 迭代求解
for iter = 1:n_iter% 计算当前图像的梯度[ux, uy] = forward_gradient(u);% 计算梯度幅度grad_mag = sqrt(ux.^2 + uy.^2 + epsilon);% 计算扩散系数 (c = lambda_map / |grad u|)c = lambda_map ./ grad_mag;% 计算散度项 div(c * grad u)div_term = backward_divergence(c .* ux, c .* uy);% 梯度下降更新u = u - dt * (2*(u - noisy_img) - div_term);% 可选:显示迭代进度if mod(iter, 50) == 0fprintf('Iteration %d/%d\n', iter, n_iter);end
enddenoised_image = uint8(clip(u, 0, 255));end% 前向差分计算梯度
function [dx, dy] = forward_gradient(u)dx = [diff(u, 1, 2), zeros(size(u, 1), 1)];dy = [diff(u, 1, 1); zeros(1, size(u, 2))];
end% 后向差分计算散度
function div = backward_divergence(vx, vy)div_x = [vx(:,1), diff(vx, 1, 2)];div_y = [vy(1,:); diff(vy, 1, 1)];div = div_x + div_y;
end% 数值裁剪
function x = clip(x, min_val, max_val)x(x < min_val) = min_val;x(x > max_val) = max_val;
end

使用

% 读取图像并添加高斯噪声
clean_img = imread('cameraman.tif');
noisy_img = imnoise(clean_img, 'gaussian', 0, 0.01);% 设置参数
lambda0 = 0.1;   % 正则化强度
k = 0.05;        % 边缘敏感度
n_iter = 100;    % 迭代次数
dt = 0.03;       % 时间步长% 执行去噪
denoised = adaptive_tv_denoise(noisy_img, lambda0, k, n_iter, dt);% 显示结果
figure;
subplot(131); imshow(clean_img);     title('原始图像');
subplot(132); imshow(noisy_img);     title('噪声图像');
subplot(133); imshow(denoised);      title('ATV去噪结果');

参数选择建议:

  1. lambda0:控制整体平滑强度

    • 值越大 → 平滑效果越强(可能损失细节)
    • 典型范围:0.05~0.2
  2. k:控制边缘敏感度

    • 值越小 → 边缘保留越强
    • 典型范围:0.01~0.1
  3. n_iter:迭代次数

    • 值越大 → 收敛越好,但计算时间增加
    • 典型范围:50~200
  4. dt:时间步长

    • 过大导致不稳定,过小收敛慢
    • 需满足稳定性条件:dt ≤ 0.25/max(lambda_map)
    • 典型范围:0.01~0.05

参考代码 bregman matlab兼顾图像平滑去噪与边缘保留的自适应全变分模型 www.youwenfan.com/contentcsh/97511.html

算法特点:

  1. 自适应正则化:根据局部梯度动态调整平滑强度

    • 平滑区域:高正则化 → 强去噪
    • 边缘区域:低正则化 → 保留细节
  2. 边缘保留:通过1/(1+∣∇f∣2/k2)1/(1+|\nabla f|^2/k^2)1/(1+∣∇f2/k2)项在边缘处降低平滑强度

  3. 全变分优势:保持图像分段光滑特性,避免阶梯效应

数学原理:

最小化能量泛函:
min⁡u∫Ω((u−f)2+λ(x)∣∇u∣)dx\min_u \int_\Omega \left( (u-f)^2 + \lambda(x)|\nabla u| \right) dxuminΩ((uf)2+λ(x)∣∇u)dx
其中自适应参数:
λ(x)=λ01+∣∇f∣2k2\lambda(x) = \frac{\lambda_0}{1 + \frac{|\nabla f|^2}{k^2}}λ(x)=1+k2∣∇f2λ0

梯度下降求解:
∂u∂t=2(f−u)+∇⋅(λ(x)∇u∣∇u∣)\frac{\partial u}{\partial t} = 2(f-u) + \nabla \cdot \left( \lambda(x) \frac{\nabla u}{|\nabla u|} \right)tu=2(fu)+(λ(x)∣∇uu)

此实现通过前向/后向差分保持数值稳定性,并在梯度计算中加入小常数ε避免除零错误。

http://www.dtcms.com/a/391168.html

相关文章:

  • 主流前端框架比较
  • 前端接口参数序列化
  • 精细调光,稳定驱动:AP5165B 在低压LED照明中的卓越表现
  • EasyGBS如何实现企业园区视频监控一体化管理?
  • Ledit 16.3 版图软件全面系统性教程
  • Linux的DTS配置信息
  • 线程池全面解析:核心原理、参数配置与实践指南
  • 【Linux】自定义协议——网络计算器实现
  • Ubuntu 安装的docker-compose拉取镜像失败问题处理办法
  • 第35篇:AI前沿:具身智能(Embodied AI)与通用人工智能(AGI)
  • LangChain 入门到精通企业项目实践之 LangChain 聊天模型
  • crush情感分析项目01
  • 免费插件分享 | Missing References Search
  • ECU OTA测试
  • Jenkins运维之路(Slave容器节点)
  • Amazon Lambda + API Gateway 实战,无服务器架构入门
  • 芯片管脚的源电流与漏电流
  • Django+ARIMA微博舆情预警系统 SnowNLP情感分析 Echarts可视化 机器学习 大数据项目✅
  • SIMetrix 8.30仿真蓝牙天线上的无源滤波器
  • [x-cmd] 升级 x-cmd 指南
  • AXI4-Stream总线流控握手实战经验总结
  • RAWSim-O-main项目Trae解析
  • react固定容器标签超出n+展示
  • ​​HarmonyOS应用开发:从入门到实战的完整指南​
  • QT与GTK生态最新进展及特性对比(2025年)
  • 包管理器分析
  • XC7K325T-2FBG676I Xilinx AMD Kintex-7 FPGA
  • FPGA入门-红外遥控
  • qml实现多页面切换显示的导航栏
  • 20250919的学习笔记