💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
【图像去噪的扩散滤波】图像线性扩散滤波、边缘增强线性和非线性各向异性滤波
各种基于扩散的图像滤波方法:
1.使用热方程的线性扩散滤波 - 使用隐式和显式欧拉方法求解。
2. 边缘增强线性各向异性扩散滤波。
3. 边缘增强非线性各向异性扩散滤波。
一、扩散滤波技术概述
扩散滤波基于热传导物理模型,通过控制像素间的扩散过程平滑噪声,同时恢复图像结构。其核心方程为偏微分方程(PDE):

其中 U 为图像灰度场,D 为扩散系数(或张量),∇ 为梯度算子,div 为散度算子。根据 D 的设计,可分为三类:
- 线性扩散滤波(D 为常数)
- 边缘增强线性扩散滤波(线性滤波 + 边缘算子预处理)
- 非线性各向异性扩散滤波(D 为梯度或结构的函数)
二、线性扩散滤波:基本原理与局限
2.1 数学模型与实现
2.2 应用与局限性
- 应用场景:深度结构分析、多尺度分割、立体匹配 。
- 核心局限:
- 边缘模糊:各向同性扩散导致重要特征(如边缘)失真。
- 尺度空间特性丢失:无法区分噪声与结构 。
三、边缘增强线性扩散滤波:改进与局限
3.1 设计原理
在线性滤波基础上引入边缘增强算子,通过预处理或后处理保留细节:
- 边缘检测:使用 Sobel、Prewitt 或 Laplacian 算子提取边缘。
- 增强处理:在边缘区域抑制平滑强度,非边缘区域正常扩散 。
3.2 性能分析
- 优势:较纯线性滤波更好保留边缘轮廓。
- 局限:
- 噪声误判:强噪声梯度可能超过真实边缘梯度,导致边缘被平滑 。
- 参数依赖:扩散系数 λλ 和迭代次数 tt 需手动调优,自适应性差 。
四、非线性各向异性扩散滤波:理论与创新
4.1 基本原理
4.3 改进方法
- 多尺度扩散:在不同尺度处理噪声与细节 。
- 正则化:避免阶梯效应(阶梯状伪影) 。
- 小波融合:结合小波分解分离高低频分量,提升扩散准确性 。
五、关键对比:数学模型与性能指标
5.1 数学模型差异
| 特征 | 线性扩散 | 边缘增强线性 | 非线性各向异性 |
|---|---|---|---|
| 扩散方程 | ∂U∂t=ΔU∂t∂U=ΔU | 线性滤波 + 边缘算子 | div(g⋅∇U)div(g⋅∇U) |
| 扩散系数 DD | 常数(标量) | 常数 | 梯度/结构的函数(标量或张量) |
| 各向异性 | 否 | 否 | 是 |
| 计算复杂度 | 低 | 中 | 高 |
5.2 性能指标对比
| 指标 | 线性扩散 | 边缘增强线性 | 非线性各向异性 |
|---|---|---|---|
| 去噪能力 | 强(均匀噪声) | 中 | 强(自适应噪声) |
| 边缘保留 | 差 | 中 | 优 |
| 细节增强 | 无 | 局部增强 | 结构定向增强 |
| 参数敏感性 | 低 | 高 | 高(kk, tt 需调优) |
| 抗强噪声能力 | 弱 | 弱 | 中(需改进模型) |
注:非线性方法在边缘保护上显著优于线性方法,但面临阶梯效应和参数敏感性问题 。
六、研究挑战与前沿方向
- 参数自适应:
- 通过机器学习动态优化 kk 和迭代次数 tt,减少人工干预 。
- 噪声鲁棒性:
- 结合高斯预平滑梯度计算,避免强噪声误判为边缘 。
- 多模态融合:
- 联合小波、总变分(TV)或深度学习模型提升细节保留能力 。
- 应用扩展:
- 地震数据(断层增强)、医学影像(血管分割)、无人机影像(边缘检测) 。
七、结论
扩散滤波技术通过物理启发的偏微分方程模型,在图像去噪领域形成完整体系:
- 线性扩散:计算高效但边缘模糊,适用于均匀噪声场景。
- 边缘增强线性:改进边缘保留,但强噪声下性能下降。
- 非线性各向异性:通过方向敏感扩散实现最优权衡,是当前研究主流,Weickert张量模型进一步提升了纹理保护能力。
未来研究需聚焦于参数自适应设计、噪声鲁棒性优化及跨模态算法融合,以推动其在实时高精度图像处理中的应用。
📚2 运行结果
2.1 non_aniso

2.2 inhomo_iso

2.3 heat_imp

2.4 heat_explicit

部分代码:
% set up finite difference parameters
alpha =.5;
k = 1;
h = 1;
lambda = (alpha^2)*(k/(h^2));
[m n] = size(w);
%stick image into a vector
w_vec = reshape(w,n*n,1);
w_old = w;
w_new = w;
%smooth the image
im_smth = filter_function(w,1);
im_smth = im_smth';
% required for g() calculation
[dx_im_smth dy_im_smth] = gradient(im_smth);
gr_im_smth = dx_im_smth.^2 + dy_im_smth.^2;
[mmm nnn] = size(gr_im_smth);
% g() calculation
for i=1:mmm
for j=1:nnn
g(i,j) = 1/(1+(gr_im_smth(i,j)/32));
end
end
%g = g';
jj=1;
[im_sx im_sy] = gradient(im_smth);
% diffusion tensor D is preconputed here
D = zeros(n*n,2,2);
for i=1:n*n
row = ceil(i/n);
col = i - (row-1) * n;
% if((col > 1) && (col < n) && (row > 1) && (row < n))
% choose eigenvector parallel and perpendicular to gradient
eigen_vec = [im_sx(row,col) im_sy(row,col); im_sy(row,col) -im_sx(row,col) ];
%choose eigenvalues
eigen_vec(:,1) = eigen_vec(:,1) ./ norm(eigen_vec(:,1));
eigen_vec(:,2) = eigen_vec(:,2) ./ norm(eigen_vec(:,2));
eigen_val = [g(row,col) 0;0 1];
% form diffusion tensor
D(i,:,:) = eigen_vec * eigen_val * (eigen_vec');
% end
end
figure;
for k=1:400 % for each iteration
for i=1:n*n % solve using Jacobi iterations scheme
row = ceil(i/n); %compute what row this pixel belongs to in original image
col = i - (row-1) * n; % compute cols similarly
%different if conditions handles pixels at different location in
%the image as depending on their location they may or may not have
%all their neighbor pixels which will be required for finite
%differences
if((col > 1) && (col < n) && (row > 1) && (row < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
w_new(i) = (-s + w_old(i))/(1 + lambda * (2 * D(i,1,1) + 2 * D(i,2,2) - D(i,1,2) - D(i,2,1)));
elseif((row == 1) && (col > 1) && (col < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
%s = -(lambda) * (w_old(i+1) + w_old(i-1) + w_old(i+n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((row == n) && (col > 1) && (col < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)));
%s = -(lambda) * (w_old(i+1) + w_old(i-1) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col == 1) && (row > 1) && (row < n))
s = -lambda * (((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
%s = -(lambda) * (w_old(i+1) + w_old(i+n) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col == n) && (row > 1) && (row < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))));
%s = -(lambda) * (w_old(i-1) + w_old(i+n) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col==1) && (row==1))
% set up finite difference parameters
alpha =.5;
k = 1;
h = 1;
lambda = (alpha^2)*(k/(h^2));
[m n] = size(w);
%stick image into a vector
w_vec = reshape(w,n*n,1);
w_old = w;
w_new = w;
%smooth the image
im_smth = filter_function(w,1);
im_smth = im_smth';
% required for g() calculation
[dx_im_smth dy_im_smth] = gradient(im_smth);
gr_im_smth = dx_im_smth.^2 + dy_im_smth.^2;
[mmm nnn] = size(gr_im_smth);
% g() calculation
for i=1:mmm
for j=1:nnn
g(i,j) = 1/(1+(gr_im_smth(i,j)/32));
end
end
%g = g';
jj=1;
[im_sx im_sy] = gradient(im_smth);
% diffusion tensor D is preconputed here
D = zeros(n*n,2,2);
for i=1:n*n
row = ceil(i/n);
col = i - (row-1) * n;
% if((col > 1) && (col < n) && (row > 1) && (row < n))
% choose eigenvector parallel and perpendicular to gradient
eigen_vec = [im_sx(row,col) im_sy(row,col); im_sy(row,col) -im_sx(row,col) ];
%choose eigenvalues
eigen_vec(:,1) = eigen_vec(:,1) ./ norm(eigen_vec(:,1));
eigen_vec(:,2) = eigen_vec(:,2) ./ norm(eigen_vec(:,2));
eigen_val = [g(row,col) 0;0 1];
% form diffusion tensor
D(i,:,:) = eigen_vec * eigen_val * (eigen_vec');
% end
end
figure;
for k=1:400 % for each iteration
for i=1:n*n % solve using Jacobi iterations scheme
row = ceil(i/n); %compute what row this pixel belongs to in original image
col = i - (row-1) * n; % compute cols similarly
%different if conditions handles pixels at different location in
%the image as depending on their location they may or may not have
%all their neighbor pixels which will be required for finite
%differences
if((col > 1) && (col < n) && (row > 1) && (row < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
w_new(i) = (-s + w_old(i))/(1 + lambda * (2 * D(i,1,1) + 2 * D(i,2,2) - D(i,1,2) - D(i,2,1)));
elseif((row == 1) && (col > 1) && (col < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
%s = -(lambda) * (w_old(i+1) + w_old(i-1) + w_old(i+n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((row == n) && (col > 1) && (col < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)));
%s = -(lambda) * (w_old(i+1) + w_old(i-1) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col == 1) && (row > 1) && (row < n))
s = -lambda * (((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
%s = -(lambda) * (w_old(i+1) + w_old(i+n) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col == n) && (row > 1) && (row < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))));
%s = -(lambda) * (w_old(i-1) + w_old(i+n) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col==1) && (row==1))
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]张建伟,王译禾,陈允杰.基于非线性扩散滤波结构信息的图像去噪方法[J].计算机工程与设计, 2016, 37(11):8.DOI:10.16208/j.issn1000-7024.2016.11.021.
[2]文武,苗放.复数域非线性扩散滤波在图像处理中的应用[J].微电子学与计算机, 2012.DOI:CNKI:SUN:WXYJ.0.2012-06-015.
[3]傅艳莉,李超,陈浩,等.各向异性扩散滤波远探测声波测井图像降噪方法[J].应用声学, 2022, 41(4):10.
[4]许韬.非线性扩散图像混合滤波去噪方法研究[J].计算机仿真, 2020, 037(012):460-464.
[5]李志伟,冯象初.维纳滤波和非线性扩散相结合的图像去噪[J].电子科技, 2007(9):4.DOI:10.3969/j.issn.1007-7820.2007.09.016.


905

被折叠的 条评论
为什么被折叠?



