You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中实现大气湍流退化函数生成退化图像

Matlab实现大气湍流图像退化的方法

实现逻辑

大气湍流退化属于频域退化操作,核心流程为:

  • 将输入图像从空域通过FFT变换到中心化的频域
  • 频域矩阵和你提供的退化函数 H(u,v)=e^(-k(u^2 + v^2)^(5/6)) 做点乘运算
  • 将运算结果通过逆FFT变换回空域,得到最终退化图像

完整可运行代码

% 1. 读入并预处理图像
I = imread('test.jpg'); % 替换为你的图像路径
if size(I,3) == 3
    I = rgb2gray(I); % 彩色图默认转灰度处理,若要保留彩色可对三个通道分别执行后续操作
end
I = im2double(I); % 转为double类型避免整数运算精度损失
[M, N] = size(I);

% 2. 生成中心化的频域坐标网格
u = linspace(-floor(N/2), floor((N-1)/2), N);
v = linspace(-floor(M/2), floor((M-1)/2), M);
[U, V] = meshgrid(u, v);

% 3. 按公式构建大气湍流退化函数
k = 0.002; % 湍流强度系数,可自行调整
dist_sq = U.^2 + V.^2; % 频域坐标点到中心的距离平方
H = exp(-k * (dist_sq).^(5/6));

% 4. 频域滤波计算退化图像
F_original = fftshift(fft2(I)); % 原图FFT并中心化
F_degraded = F_original .* H; % 频域点乘退化函数
I_degraded = real(ifft2(ifftshift(F_degraded))); % 逆FFT转回空域,取实部消除浮点误差虚部
I_degraded = max(min(I_degraded, 1), 0); % 裁剪数值到0~1的有效范围

% 结果展示与保存
imshowpair(I, I_degraded, 'montage');
title('原图 / 大气湍流退化图');
% imwrite(I_degraded, 'turbulence_degraded.jpg'); % 取消注释可保存结果

参数与注意事项

  • 湍流强度参数k:值越大退化效果越强烈,弱湍流建议取0.00050.001,中等湍流取0.0010.005,强湍流取0.005以上
  • 处理彩色图像时,不要直接对三通道原图做FFT,需要拆分R/G/B三个通道分别执行退化操作后再合并
  • 频域坐标必须做中心化处理,否则会出现退化效果偏移、边界异常的问题

内容的提问来源于stack exchange,提问作者Halexia's

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:24:01