低照度图像增强matlab
时间: 2025-05-20 16:46:04 浏览: 13
### 使用Matlab实现低照度图像增强的方法
#### 方法一:自适应直方图均衡化(AHE)
自适应直方图均衡化是一种局部增强技术,能够有效提升低照度图像的质量。通过划分图像的小区域并对其进行独立的直方图均衡化操作,可以显著改善图像细节的表现力。
以下是一个完整的代码示例:
```matlab
close all;
clear all;
warning off all;
I = imread('rice.png');
figure; imshow(I); title('原始图像');
[m, n, d] = size(I);
if d == 1
J = I;
else
J = rgb2gray(I);
end
% 图像边界扩展
w = 257;
k = 0.8;
w = k * min(m, n);
padsize = [w / 2, w / 2];
padsize = ceil(padsize);
padSrc = padarray(J, padsize, 'symmetric', 'both');
R = zeros(m, n);
iter = 0;
w2 = w;
w3 = ceil(w / 2);
for i = 1:m
for j = 1:n
slideWindow = padSrc(i:i + w2 - 1, j:j + w2 - 1);
AHE_pixel = AHE(slideWindow, J(i, j));
R(i, j) = AHE_pixel;
end
end
R = uint8(R);
figure; imshow(R); title('处理后的图像');
function outPixel = AHE(window, inPixel)
[m, n] = size(window);
ProbPixel = imhist(window) / (m * n);
% 计算累积分布密度
CumuPixel = zeros(1, 256);
CumuPixel(1) = ProbPixel(1);
for l = 2:256
CumuPixel(l) = CumuPixel(l - 1) + ProbPixel(l);
end
CumuPixel = uint8(255 .* CumuPixel + 0.5); % 取整数
outPixel = CumuPixel(inPixel);
end
```
这种方法适用于需要保留更多局部细节的情况[^2]。
---
#### 方法二:全局增强法
全局增强方法主要针对整个图像进行调整,适合用于均匀光照条件下的低照度场景。该方法的核心是对像素值进行非线性变换以提高对比度。
以下是具体的实现代码:
```matlab
clear; clc; close all;
% 读入图片
A = imread('before.png');
figure; imshow(A); title('RGB Original Image');
outval = ALTM(A);
figure; imshow(outval);
function outval = ALTM(I)
II = im2double(I);
Ir = double(II(:, :, 1));
Ig = double(II(:, :, 2));
Ib = double(II(:, :, 3));
% 输入世界亮度值
Lw = 0.299 * Ir + 0.587 * Ig + 0.114 * Ib;
% 最大亮度值
Lwmax = max(max(Lw));
[m, n] = size(Lw);
% 对数值平均亮度
Lwaver = exp(sum(sum(log(0.001 + Lw))) / (m * n));
Lg = log(Lw / Lwaver + 1) / log(Lwmax / Lwaver + 1);
gain = Lg ./ Lw;
gain(find(Lw == 0)) = 0;
outval = cat(3, gain .* Ir, gain .* Ig, gain .* Ib);
end
```
此方法简单高效,在大多数情况下都能取得较好的效果[^3]。
---
#### 方法三:同态滤波器
同态滤波器是一种频率域上的增强方法,它通过对图像的不同频谱成分施加不同的增益来达到增强目的。具体来说,它可以减少阴影效应并增加图像的整体清晰度。
下面是基于同态滤波的实现代码:
```matlab
function HomomorphicFilter()
originalImage = imread('low_light_image.jpg');
figure; subplot(1, 2, 1),imshow(originalImage),title('Original Image');
gammaL = 0.5; gammaH = 2.5; c = 1; D0 = 10; rH = 0.5; rL = 0.5;
Y = rgb2gray(im2double(originalImage));
[M,N] = size(Y);
fftY = fftshift(log(1 + fft2(Y)));
U = 1:M;
V = 1:N;
[V,U] = meshgrid(V-U(N/2+1),U-M/2);
D = sqrt(U.^2 + V.^2);
H = (gammaH-gammaL).*(1-exp(-c.*(D./D0).^2))+gammaL;
filteredY = real(ifft2(exp(fftshift(H.*ifftshift(fftY)))));
enhancedImage = mat2gray(filteredY);
subplot(1, 2, 2),imshow(enhancedImage),title('Enhanced Image');
end
```
这种技术特别适合于存在明显明暗差异的复杂场景中的应用[^4]。
---
### 总结
以上三种方法各有优劣,可以根据实际需求选择合适的技术路线。如果追求更高的计算效率,则可以选择全局增强;而当关注的是局部特征时,推荐使用自适应直方图均衡化或者同态滤波器。
阅读全文
相关推荐


















