matlab对低照度图像的增强
时间: 2025-02-26 10:21:04 浏览: 50
### 使用Matlab实现低照度图像增强
#### 同态滤波法
同态滤波是一种有效的用于改善图像质量的技术,尤其适用于低照度条件下的图像。通过将输入图像转换到频率域,在该领域内调整其动态范围并减少阴影效果,从而达到增强目的[^3]。
```matlab
function enhancedImage = homomorphicFiltering(image, D0, rh, rl, c)
% 将图像转为双精度浮点型以便后续运算
imgDouble = im2double(rgb2gray(image));
% 对数变换
logTransformedImg = log(1 + imgDouble);
% 获取图像尺寸
[M, N] = size(logTransformedImg);
% 创建高通巴特沃斯滤波器
H = fspecial('gaussian', [M N], D0);
H = (rh - rl) * (1 ./ (1 + ((D0./(H+eps)).^(2*c)))) + rl;
% 应用傅立叶变换并将中心移到角落处
F = fftshift(fft2(ifftshift(double(logTransformedImg))));
% 进行滤波操作
filteredF = H .* F;
% 反向傅立叶变换回到空间域
inverseLogTransformedImage = exp(real(ifft2(filteredF))) - 1;
% 调整像素值至合理区间
enhancedImage = mat2gray(inverseLogTransformedImage);
end
```
此代码实现了基于同态滤波原理的低照度图像增强功能。其中`homomorphicFiltering()`函数接收原始图片以及一些参数作为输入,并返回经过处理后的增强版本。
#### Retinex理论方法
另一种流行的低光增强方案是基于Retinex模型的方法。这种方法假设场景中的每一个位置都由两部分组成——反射率和光照强度。因此可以通过估计光照成分来恢复真实的表面属性[^4]。
```matlab
function retinexEnhancedImage = singleScaleRetinex(img, sigma)
% 计算光照分量
L = imgaussfilt(im2double(rgb2gray(img)), sigma);
% 求解反射分量R
R = img ./ (L + eps);
% 归一化处理使结果看起来更自然
retinexEnhancedImage = mat2gray(R);
end
```
上述MATLAB脚本展示了单尺度Retinex(SSR)算法的核心逻辑。这里定义了一个名为`singleScaleRetinex()`的新函数,它接受一张彩色或灰度图及其对应的σ值(控制平滑程度),并通过简单的除法得到最终的结果。
阅读全文
相关推荐


















