【图像去噪】基于ADMM-TGV实现图像去噪附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎 往期回顾关注个人主页:Matlab科研工作室

🍊个人信条:格物致知,完整Matlab代码及仿真咨询内容私信。

🔥 内容介绍

打开手机相册,你是否遇到过这样的困扰:夜景照片满是 “雪花点”,老照片扫描后布满杂色,医学影像的细微病灶被噪点掩盖?这些让人头疼的 “噪点”,本质是图像采集、传输或存储过程中混入的随机信号干扰。而今天要介绍的ADMM-TGV 算法,就像给图像装了一台 “智能滤镜”,既能精准剔除噪点,又能守住画面的细节与边缘 —— 这篇文章,我们就来拆解这项兼顾 “去噪力” 与 “保真性” 的技术。

一、先搞懂:为什么普通去噪总 “顾此失彼”?

在聊 ADMM-TGV 之前,我们得先明白一个核心矛盾:传统去噪算法大多在 “去噪” 和 “保细节” 之间反复横跳。

比如大家熟悉的 “高斯滤波”,本质是给图像做 “模糊处理”—— 噪点确实少了,但照片里的文字边缘、物体轮廓也跟着变虚;再比如 “中值滤波”,对付椒盐噪点很管用,可遇到渐变的光影(比如夕阳下的天空),就会留下明显

的 “块断层”。

问题的根源在于:传统算法大多把 “去噪” 当成 “全局平滑”,却忽略了图像的 “局部特征”—— 我们需要的是 “该平滑的地方(噪点区域)使劲平,该锐利的地方(边缘细节)坚决保”。而 ADMM-TGV 算法,正是为解决这个矛盾而生。

二、TGV 模型:给图像去噪装 “智能判官”

要理解 ADMM-TGV,得先从 “TGV” 说起。TGV 的全称是Total Generalized Variation(总广义变分),它的核心思路是:用 “变分” 判断图像的 “真实特征” 与 “虚假噪点”。

我们可以把图像想象成一张 “高低起伏的地形地图”:

  • 平坦的区域(比如纯色背景):像素值变化小,“地形坡度” 平缓;色边缘区域(比如文字边框、人脸轮廓):像素值突然变化,“地形坡度” 陡峭;
  • 噪点区域(比如照片里的雪花点):像素值毫无规律地跳变,“地形坡度” 乱晃。

传统的 “总变分(TV)模型”,只会看 “坡度大小”—— 只要坡度大,就认定是 “需要保留的边缘”。但这种判断很粗糙:有些噪点的 “坡度” 也很大,容易被当成 “边缘” 保留下来;而有些平缓的细节(比如皮肤纹理),又会被当成 “噪点” 平滑掉。

TGV 模型则升级了 “判断标准”:它不仅看 “坡度大小”,还看 “坡度的变化规律”——

  • 真实边缘的 “坡度” 是连续的(比如直线边缘的坡度方向一致,曲线边缘的坡度缓慢变化);
  • 噪点的 “坡度” 是混乱的(一会儿向上,一会儿向下,毫无规律)。

简单说,TGV 就像一位 “智能判官”:能精准区分 “有规律的边缘” 和 “无规律的噪点”,从而实现 “去噪不模糊,保边不含糊”。

三、ADMM 算法:让 TGV 模型 “跑起来” 的 “加速器”

TGV 模型的思路很好,但直接计算起来非常复杂 —— 如果把图像去噪的计算过程比作 “解一道超难的数学题”,TGV 就是 “解题思路”,而 ADMM 则是 “高效解题步骤”。

ADMM 的全称是Alternating Direction Method of Multipliers(交替方向乘子法),它的核心作用是 “化繁为简”:把 TGV 模型这种复杂的 “全局优化问题”,拆成 3 个简单的 “局部子问题”,然后循环迭代求解,直到得到最优结果。

我们用 “打扫房间” 来类比这个过程:

  1. 第一步:拆分任务(变量分解)

把 “给整个房间大扫除”(全局去噪),拆成 “擦窗户”“拖地板”“整理书桌”(三个局部子问题),每个任务单独处理,难度瞬间降低。

  1. 第二步:轮流打扫(交替迭代)

先专注 “擦窗户”(求解第一个子问题:更新图像变量),把窗户擦干净;再专注 “拖地板”(求解第二个子问题:更新梯度变量),把地面拖整洁;最后 “整理书桌”(求解第三个子问题:更新乘子变量),校准之前的误差。

  1. 第三步:检查效果(收敛判断)

每轮打扫完,看看 “房间整体干净度” 是否达标 —— 如果窗户还有灰、地面还有污渍,就再循环一轮;直到所有区域都干净,就停止打扫。

这种 “拆分 - 迭代 - 校准” 的思路,让 TGV 模型从 “理论可行” 变成 “实际可用”:不仅计算速度快(比直接求解 TGV 快 3-5 倍),还能适配不同分辨率的图像(从手机照片到医学 CT 影像都能用)。

四、ADMM-TGV 实战:这些场景下它 “碾压” 传统算法

光说不练假把式,我们来看 ADMM-TGV 在实际场景中的表现 ——

1. 医学影像去噪:不丢 “救命细节”

在 CT、MRI 影像中,噪点可能会掩盖微小病灶(比如早期肿瘤、细小血管堵塞)。传统算法去噪后,病灶边缘会变模糊,影响医生判断。

而 ADMM-TGV 能在剔除噪点的同时,精准保留病灶的边缘轮廓(比如肺部小结节的边界、血管的分支结构)。有实验数据显示:在相同噪点去除率下,ADMM-TGV 处理后的医学影像,边缘清晰度比传统 TV 算法高 20%-30%,为临床诊断提供更可靠的依据。

2. 老照片修复:留住 “时光细节”

家里的老照片存放久了,会出现褪色、斑点和划痕。用普通软件修复时,容易把照片里的皱纹、发丝等细节 “磨平”,让人物失去真实感。

ADMM-TGV 则能 “精准修复”:它会把斑点和划痕识别为 “噪点” 并去除,同时保留人物的皮肤纹理、衣物褶皱等细节。修复后的老照片,既能恢复干净的画面,又不失 “岁月的质感”。

3. 夜景摄影去噪:告别 “糊成一片”

夜景照片的噪点问题最突出 —— 为了提亮画面,相机容易引入大量噪点,导致画面满是 “雪花”。用传统算法去噪,往往会把灯光的光晕、夜景的层次感也一并去掉,让照片显得 “灰蒙蒙”。

ADMM-TGV 能区分 “灯光的渐变边缘” 和 “随机噪点”:它会剔除画面中的 “雪花点”,同时保留灯光的柔和光晕、建筑的轮廓线条。处理后的夜景照片,既能保持干净的画面,又能还原夜晚的光影氛围。

⛳️ 运行结果

📣 部分代码

%% Please cite https://doi.org/10.1007/s11075-024-01759-2 and/or https://doi.org/10.1016/j.ultramic.2025.114159 if used!

%% ---------------------------------------_Initialize deconvolution algorithm_---------------------------------------

% set the z and u variables to 0 as starting values.

% However, z0 is best chosen as the data to make the convergence faster.

f = waitbar(0,sprintf('Deconvolve with ADMM-RBTGV: %d %%', 0));

% Initialize z-Variables

SizeDat = size(Data);

z0 = Data;

z1x = zeros(SizeDat);

z1y = zeros(SizeDat);

z1z = zeros(SizeDat);

z2x = zeros(SizeDat);

z2y = zeros(SizeDat);

z2z = zeros(SizeDat);

z2xy = zeros(SizeDat);

z2xz = zeros(SizeDat);

z2yz = zeros(SizeDat);

% Initialize u-Variables

u0 = zeros(SizeDat);

u1x = zeros(SizeDat);

u1y = zeros(SizeDat);

u1z = zeros(SizeDat);

u2x = zeros(SizeDat);

u2y = zeros(SizeDat);

u2z = zeros(SizeDat);

u2xy = zeros(SizeDat);

u2xz = zeros(SizeDat);

u2yz = zeros(SizeDat);

% Initialize x/t-Variables

x = zeros(SizeDat);

T1 = zeros(SizeDat);

T2 = zeros(SizeDat);

T3 = zeros(SizeDat);

% Precompute Kernels

Kernel = Kernel./sum(Kernel,'all');

A = fftn(Kernel,SizeDat);

At = conj(A);

AtA = At.*A;

%% Parameter Choice

% Residual balancing makes the initial choice of rho0, rho and eta

% arbitrary. Lambda0 and Lambda1 are best chosen to be half the inverse of the noise std

% in a scientific context. Since the total variation prior depends on the noise of the deconvolved

% data, the noise is amplified by a factor 'Incr', that must be regarded.

% Note, that a PSF of a detector correlates the outcome Poisson noise! This

% must necessarily be regarded. In the case where the kernel is equal to the detector PSF, the increase of the Poisson

% noise is given as the sum of the Pearson coefficients, which are given as

% the convolution of the PSF with itself. Details are found in https://doi.org/10.1016/j.ultramic.2025.114159.

S3norm = rho.*Dt(u1z ,3);

S3a = rho.*(D(-x_old,3) + z1z_old );

clearvars x_old z1z_old

S3anorm = rho.*u1z;

SN0 = max(mean( S0norm.^2 ,'all'),mean((S1norm + S2norm + S3norm - S ).^2,'all'));

SN = max(mean((S1norm + S2norm + S3norm).^2,'all'),mean((S0norm - S0).^2,'all'));

clearvars S0norm S1norm S2norm S3norm

Snorm0 = sqrt(mean(S0.^2,'all')/SN0);

clearvars S0 SN0

S = sqrt(mean(S.^2,'all') + mean(S1a.^2,'all') + mean(S2a.^2,'all') + mean(S3a.^2,'all'));

R = sqrt(R + mean((Dz - z1z - T3).^2,'all'));

R1norm = R1norm + mean((Dz - T3).^2,'all') ;

R2norm = R2norm + mean(( z1z ).^2,'all') ;

RN = sqrt(max(R1norm,R2norm));

clearvars R1norm R2norm

Rnorm = R/RN;

clearvars R RN

end

clearvars Dz

% z_2 update

Htx = Dt(T1,2);

v2x = Htx + u2x;

Htxy = Dt(T1,1) + Dt(T2,2);

v2xy = Htxy + u2xy;

Hty = Dt(T2,1);

v2y = Hty + u2y;

Htxz = Dt(T1,3) + Dt(T3,2);

v2xz = Htxz + u2xz;

Htyz = Dt(T2,3) + Dt(T3,1);

v2yz = Htyz + u2yz;

Htz = Dt(T3,3);

v2z = Htz + u2z;

k = lambda1/eta;

vnorm = sqrt(v2x.^2 + v2xy.^2 + v2y.^2 + v2xz.^2 + v2yz.^2 + v2z.^2);

if doResBal

z2x_old = z2x;

end

z2x = cSk(v2x,vnorm,k);

u2x = v2x - z2x ;

clearvars v2x

if doResBal

s1 = - eta.*D(z2x - z2x_old,2);

clearvars z2x_old

s1norm = eta.*D(u2x ,2);

r = mean((Htx - z2x).^2,'all');

r1norm = mean((Htx ).^2,'all');

r2norm = mean(( z2x).^2,'all');

end

clearvars Htx

if doResBal

z2xy_old = z2xy;

end

z2xy = cSk(v2xy,vnorm,k);

u2xy = v2xy - z2xy;

clearvars v2xy

if doResBal

z2xy_old = z2xy - z2xy_old ;

s1 = s1 - eta.*D(Dt(-T2_old,2) + z2xy_old ,1);

s1norm = s1norm + eta.*D( u2xy , 1);

s2 = - eta.*D(Dt(-T1_old,1) + z2xy_old ,2);

clearvars z2xy_old

s2norm = eta.*D( u2xy , 2);

r = r + mean((Htxy - z2xy).^2,'all');

r1norm = r1norm + mean((Htxy ).^2,'all');

r2norm = r2norm + mean(( z2xy).^2,'all');

end

clearvars Htxy

if doResBal

z2y_old = z2y ;

end

z2y = cSk(v2y,vnorm,k);

u2y = v2y - z2y ;

clearvars v2y

if doResBal

s2 = s2 - eta.*(D(z2y - z2y_old,1));

clearvars z2y_old

s2norm = s2norm + eta.*(D( u2y ,1));

r = r + mean((Hty - z2y).^2,'all');

r1norm = r1norm + mean((Hty ).^2,'all');

r2norm = r2norm + mean(( z2y).^2,'all');

end

clearvars Hty

if doResBal

z2xz_old = z2xz;

end

z2xz = cSk(v2xz,vnorm,k);

u2xz = v2xz - z2xz;

clearvars v2xz

if doResBal

z2xz_old = z2xz - z2xz_old ;

s1 = s1 - eta.*D(Dt(-T3_old,2) + z2xz_old ,3);

s1norm = s1norm + eta.*D( u2xz , 3);

s = mean(s1.^2,'all');

sn = max(mean((S1anorm - S1a).^2,'all') , mean(s1norm.^2 ,'all'));

clearvars S1a

SN = SN + max(mean((s1norm - s1 ).^2,'all') , mean(S1anorm.^2,'all'));

clearvars S1anorm s1 s1norm

s3 = - eta.*D(Dt(-T1_old,3) + z2xz_old ,2);

s3norm = eta.*D( u2xz , 2);

r = r + mean((Htxz - z2xz).^2,'all');

r1norm = r1norm + mean((Htxz ).^2,'all');

r2norm = r2norm + mean(( z2xz).^2,'all');

end

clearvars Htxz

if doResBal

z2yz_old = z2yz;

end

z2yz = cSk(v2yz,vnorm,k);

u2yz = v2yz - z2yz;

clearvars v2yz

if doResBal

z2yz_old = z2yz - z2yz_old ;

s2 = s2 - eta.*D(Dt(-T3_old,1) + z2yz_old ,3);

s2norm = s2norm + eta.*D( u2yz , 3);

s = s + mean(s2.^2,'all');

sn = sn + max(mean((S2anorm - S2a).^2,'all') , mean(s2norm.^2 ,'all'));

clearvars S2a

SN = SN + max(mean((s2norm - s2 ).^2,'all') , mean(S2anorm.^2,'all'));

clearvars S2anorm s2 s2norm

s3 = s3 - eta.*D( Dt(-T2_old,3) + z2yz_old ,1);

s3norm = s3norm + eta.*D( u2yz ,1);

r = r + mean((Htyz - z2yz).^2,'all');

r1norm = r1norm + mean((Htyz ).^2,'all');

r2norm = r2norm + mean(( z2yz).^2,'all');

end

clearvars Htyz

if doResBal

z2z_old = z2z;

end

z2z = cSk(v2z,vnorm,k);

u2z = v2z - z2z ;

clearvars v2z vnorm

if doResBal

s3 = s3 - eta.*D(z2z - z2z_old,3);

clearvars z2z_old

s3norm = s3norm + eta.*D(u2z ,3);

s = sqrt(s + mean(s3.^2,'all'));

sn = sqrt(sn + max(mean((S3anorm - S3a).^2,'all') , mean(s3norm.^2 ,'all')));

clearvars S3a

SN = sqrt(SN + max(mean((s3norm - s3 ).^2,'all') , mean(S3anorm.^2,'all')));

clearvars S3anorm s3 s3norm

snorm = s/sn;

clearvars s sn

Snorm = S/SN;

clearvars S SN

r = sqrt(r + mean((Htz - z2z).^2,'all'));

r1norm = r1norm + mean((Htz ).^2,'all');

r2norm = r2norm + mean(( z2z).^2,'all');

rn = sqrt(max(r1norm,r2norm));

clearvars r1norm r2norm

rnorm = r/rn;

clearvars r rn

end

clearvars Htz

if doResBal

% Applies the residual balancing to the penalty parameters rho_0 (z0 residuals), rho (z1 residuals) and eta (z2 residuals)

% rho_0 update

tau_rho_0 = sqrt(Rnorm0/Snorm0);

if isnan(tau_rho_0) || tau_rho_0==0 || tau_rho_0==inf

if rho_0 > 1

tau_rho_0 = lim^(-1);

elseif rho_0 < 1

tau_rho_0 = lim^( 1);

else

tau_rho_0 = 1;

end

end

tau_rho_0 = max(min(tau_rho_0,10^(lim2)/rho_0),10^(-lim2)/rho_0);

rho_0 = rho_0.*tau_rho_0;

u0 = u0 ./tau_rho_0; % all u variables must be rescaled inversely

% rho update

tau_rho = sqrt(Rnorm/Snorm);

if isnan(tau_rho) || tau_rho==0 || tau_rho==inf

if rho > 1

tau_rho = lim^(-1);

elseif rho < 1

tau_rho = lim^( 1);

else

tau_rho = 1;

end

end

tau_rho = max(min(tau_rho,10^(lim2)/rho),10^(-lim2)/rho);

rho = rho.*tau_rho;

u1x = u1x ./tau_rho; % all u variables must be rescaled inversely

u1y = u1y ./tau_rho;

u1z = u1z ./tau_rho;

% eta update

tau_eta = sqrt(rnorm/snorm);

if isnan(tau_eta) || tau_eta==0 || tau_eta==inf

if eta > 1

tau_eta = lim^(-1);

elseif eta < 1

tau_eta = lim^( 1);

else

tau_eta = 1;

end

end

tau_eta = max(min(tau_eta,10^(lim2)/eta),10^(-lim2)/eta);

eta = eta .*tau_eta;

u2x = u2x ./tau_eta; % all u variables must be rescaled inversely

u2xy = u2xy./tau_eta;

u2y = u2y ./tau_eta;

u2xz = u2xz./tau_eta;

u2yz = u2yz./tau_eta;

u2z = u2z ./tau_eta;

% Update denominator for x/t update

if tau_rho_0 ~=1 && tau_rho ~=1 && tau_eta~=1

A11 = rho_0.*AtA + rho.*DtD; A12 = - rho .*dtx ; A13 = - rho .*dty ; A14 = - rho .*dtz ;

A21 = - rho.*dx ; A22 = rho + eta .*DtD ; A23 = eta.*dy .*dtx ; A24 = eta.*dz .*dtx ;

A31 = - rho.*dy ; A32 = eta .*dx .*dty ; A33 = rho + eta.*DtD ; A34 = eta.*dz .*dty ;

A41 = - rho.*dz ; A42 = eta .*dx .*dtz ; A43 = eta.*dy .*dtz ; A44 = rho + eta.*DtD ;

C11 = ( (A22.*A33.*A44) + (A23.*A34.*A42) + (A24.*A32.*A43) - (A42.*A33.*A24)- (A43.*A34.*A22) - (A44.*A32.*A23) );

C12 = -( (A21.*A33.*A44) + (A23.*A34.*A41) + (A24.*A31.*A43) - (A41.*A33.*A24)- (A43.*A34.*A21) - (A44.*A31.*A23) );

C13 = ( (A21.*A32.*A44) + (A22.*A34.*A41) + (A24.*A31.*A42) - (A41.*A32.*A24)- (A42.*A34.*A21) - (A44.*A31.*A22) );

C14 = -( (A21.*A32.*A43) + (A22.*A33.*A41) + (A23.*A31.*A42) - (A41.*A32.*A23)- (A42.*A33.*A21) - (A43.*A31.*A22) );

C21 = -( (A12.*A33.*A44) + (A13.*A34.*A42) + (A14.*A32.*A43) - (A42.*A33.*A14)- (A43.*A34.*A12) - (A44.*A32.*A13) );

C22 = ( (A11.*A33.*A44) + (A13.*A34.*A41) + (A14.*A31.*A43) - (A41.*A33.*A14)- (A43.*A34.*A11) - (A44.*A31.*A13) );

C23 = -( (A11.*A32.*A44) + (A12.*A34.*A41) + (A14.*A31.*A42) - (A41.*A32.*A14)- (A42.*A34.*A11) - (A44.*A31.*A12) );

C24 = ( (A11.*A32.*A43) + (A12.*A33.*A41) + (A13.*A31.*A42) - (A41.*A32.*A13)- (A42.*A33.*A11) - (A43.*A31.*A12) );

C31 = ( (A12.*A23.*A44) + (A13.*A24.*A42) + (A14.*A22.*A43) - (A42.*A23.*A14)- (A43.*A24.*A12) - (A44.*A22.*A13) );

C32 = -( (A11.*A23.*A44) + (A13.*A24.*A41) + (A14.*A21.*A43) - (A41.*A23.*A14)- (A43.*A24.*A11) - (A44.*A21.*A13) );

C33 = ( (A11.*A22.*A44) + (A12.*A24.*A41) + (A14.*A21.*A42) - (A41.*A22.*A14)- (A42.*A24.*A11) - (A44.*A21.*A12) );

clearvars A44

C34 = -( (A11.*A22.*A43) + (A12.*A23.*A41) + (A13.*A21.*A42) - (A41.*A22.*A13)- (A42.*A23.*A11) - (A43.*A21.*A12) );

clearvars A42 A43

C41 = -( (A12.*A23.*A34) + (A13.*A24.*A32) + (A14.*A22.*A33) - (A32.*A23.*A14)- (A33.*A24.*A12) - (A34.*A22.*A13) );

C42 = ( (A11.*A23.*A34) + (A13.*A24.*A31) + (A14.*A21.*A33) - (A31.*A23.*A14)- (A33.*A24.*A11) - (A34.*A21.*A13) );

C43 = -( (A11.*A22.*A34) + (A12.*A24.*A31) + (A14.*A21.*A32) - (A31.*A22.*A14)- (A32.*A24.*A11) - (A34.*A21.*A12) );

clearvars A14 A24 A34

C44 = ( (A11.*A22.*A33) + (A12.*A23.*A31) + (A13.*A21.*A32) - (A31.*A22.*A13)- (A32.*A23.*A11) - (A33.*A21.*A12) );

clearvars A12 A13 A22 A23 A32 A33

detA = 1./(A11.*C11 + A21.*C21 + A31.*C31 + A41.*C41);

clearvars A11 A21 A31 A41

iA11 = C11.*detA ; clearvars C11 ; iA21 = C12.*detA ; clearvars C12 ; iA31 = C13.*detA ;clearvars C13 ; iA41 = C14.*detA ; clearvars C14 ;

iA12 = C21.*detA ; clearvars C21 ; iA22 = C22.*detA ; clearvars C22 ; iA32 = C23.*detA ;clearvars C23 ; iA42 = C24.*detA ; clearvars C24 ;

iA13 = C31.*detA ; clearvars C31 ; iA23 = C32.*detA ; clearvars C32 ; iA33 = C33.*detA ;clearvars C33 ; iA43 = C34.*detA ; clearvars C34 ;

iA14 = C41.*detA ; clearvars C41 ; iA24 = C42.*detA ; clearvars C42 ; iA34 = C43.*detA ;clearvars C34 ; iA44 = C44.*detA ; clearvars C44 ;

clearvars detA

end

end

waitbar(iter/NIter,f,sprintf('Deconvolve with ADMM-RBTGV: %d %%', floor(iter/NIter*100)));

end

Result = x;

close(f);

clearvars -except Result

end

function z = cSk(v1,vnorm,k)

z = zeros(size(v1));

z(vnorm>=k) = v1(vnorm>=k)- k * v1(vnorm>=k)./vnorm(vnorm>=k);

clearvars -except z

end

function Grad = D(x,dim)

% forward derivative

Grad = x - circshift(x,+1,dim);

clearvars -except Grad

end

function Grad = Dt(x,dim)

% backward derivative

Grad = x - circshift(x,-1,dim);

clearvars -except Grad

end

🔗 参考文献

🎈 部分理论引用网络文献,若有侵权联系博主删除

 👇 关注我领取海量matlab电子书和数学建模资料 

🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:

🌟 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位、冷链、时间窗、多车场等、选址优化、港口岸桥调度优化、交通阻抗、重分配、停机位分配、机场航班调度、通信上传下载分配优化
🌟 机器学习和深度学习时序、回归、分类、聚类和降维

2.1 bp时序、回归预测和分类

2.2 ENS声神经网络时序、回归预测和分类

2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类

2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类

2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类

2.7 ELMAN递归神经网络时序、回归\预测和分类

2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类

2.9 RBF径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
🌟图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
🌟 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻、公交车时间调度、水库调度优化、多式联运优化
🌟 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划、
🌟 通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
🌟 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
🌟电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电、电/冷/热负荷预测、电力设备故障诊断、电池管理系统(BMS)SOC/SOH估算(粒子滤波/卡尔曼滤波)、 多目标优化在电力系统调度中的应用、光伏MPPT控制算法改进(扰动观察法/电导增量法)、电动汽车充放电优化、微电网日前日内优化、储能优化、家庭用电优化、供应链优化
🌟 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌟 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌟 车间调度
零等待流水车间调度问题NWFSP 、 置换流水车间调度问题PFSP、 混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP

👇

5 往期回顾扫扫下方二维码

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值