深圳市网站建设_网站建设公司_Oracle_seo优化
2026/1/19 17:50:24 网站建设 项目流程

图像增强,图像去雾,常用算法集合,Matlab实现。 包括:直方图算法,Retinex系列算法(SSR,MSR,MSRCR),暗通道先验算法。 代码都已调试好,可直接输入图像出结果。 去雾效果对比如图所示。

在图像处理领域,图像增强和去雾是两个非常重要的研究方向。图像增强旨在提升图像的视觉质量,让图像看起来更加清晰、丰富;而图像去雾则是为了从雾天等低能见度条件下拍摄的图像中恢复出清晰的场景。今天就来给大家分享一些常用的图像增强和去雾算法及其Matlab实现。

直方图算法

直方图算法是一种简单但有效的图像增强方法。它通过重新分配图像的灰度值,使图像的灰度分布更加均匀,从而提升图像的对比度。

% 读取图像 img = imread('input.jpg'); % 判断图像是否为彩色图像 if size(img, 3) == 3 img = rgb2gray(img); end % 计算直方图 histogram = imhist(img); % 直方图均衡化 enhanced_img = histeq(img); % 显示原始图像和增强后的图像 subplot(1, 2, 1); imshow(img); title('原始图像'); subplot(1, 2, 2); imshow(enhanced_img); title('直方图均衡化后的图像');

在这段代码中,首先读取图像,如果是彩色图像则将其转换为灰度图像。然后通过imhist函数计算图像的直方图,再利用histeq函数进行直方图均衡化,最后将原始图像和增强后的图像显示出来对比效果。直方图均衡化通过拉伸灰度级范围,将原本集中在某些灰度区间的像素重新分布到整个灰度范围内,这样就增加了图像的对比度。

Retinex系列算法

SSR(单尺度Retinex算法)

Retinex理论的基本思想是将图像的亮度信息和反射率信息分离,通过增强反射率信息来实现图像增强。SSR算法是Retinex算法的一种简单实现。

function enhanced_img = SSR(img, sigma) % 高斯滤波 blurred_img = imgaussfilt(img, sigma); % 计算对数域的差值 enhanced_img = log10(img + 1) - log10(blurred_img + 1); % 转换回线性域并归一化 enhanced_img = 255 * (enhanced_img - min(enhanced_img(:))) / (max(enhanced_img(:)) - min(enhanced_img(:))); enhanced_img = uint8(enhanced_img); end

这里SSR函数接收输入图像img和高斯滤波的标准差sigma。首先利用imgaussfilt对图像进行高斯滤波,模拟人眼对不同尺度的响应。然后在对数域计算原图像与滤波后图像的差值,最后将结果转换回线性域并归一化到0 - 255的范围,得到增强后的图像。

MSR(多尺度Retinex算法)

MSR算法结合了多个不同尺度的高斯滤波,以获取更丰富的图像细节。

function enhanced_img = MSR(img, sigmas) num_sigmas = length(sigmas); msr_result = zeros(size(img)); for i = 1:num_sigmas blurred_img = imgaussfilt(img, sigmas(i)); msr_result = msr_result + log10(img + 1) - log10(blurred_img + 1); end msr_result = msr_result / num_sigmas; enhanced_img = 255 * (msr_result - min(msr_result(:))) / (max(msr_result(:)) - min(msr_result(:))); enhanced_img = uint8(enhanced_img); end

此函数MSR接收图像img和一个包含多个标准差的数组sigmas。通过循环对不同尺度的高斯滤波结果进行累加,再平均得到最终的增强结果,相比SSR,它能更好地保留图像不同尺度的细节。

MSRCR(多尺度Retinex颜色恢复算法)

MSRCR算法在MSR的基础上增加了颜色恢复的功能,使得增强后的图像颜色更加自然。

function enhanced_img = MSRCR(img, sigmas, alpha, beta) num_sigmas = length(sigmas); msr_result = zeros(size(img)); for i = 1:num_sigmas blurred_img = imgaussfilt(img, sigmas(i)); msr_result = msr_result + log10(img + 1) - log10(blurred_img + 1); end msr_result = msr_result / num_sigmas; % 颜色恢复 intensity = mean(img, 3); color_restoration = alpha * log10(beta * img./ intensity(:, :, ones(1, 3)) + 1); enhanced_img = msr_result.* color_restoration; enhanced_img = 255 * (enhanced_img - min(enhanced_img(:))) / (max(enhanced_img(:)) - min(enhanced_img(:))); enhanced_img = uint8(enhanced_img); end

这里在MSR的基础上,通过计算图像的亮度信息intensity,并利用颜色恢复系数alphabeta来调整图像的颜色,使得增强后的图像不仅细节丰富,颜色也更加逼真。

暗通道先验算法

暗通道先验算法是一种经典的图像去雾算法。其核心思想是在大多数非天空的局部区域里,至少有一个颜色通道会有很低的值,这些区域就构成了暗通道。

function [J, t] = dehaze(img, omega, w) % 暗通道计算 dark_channel = minChannel(minFilter(img, w)); % 大气光估计 [~, I] = sort(dark_channel(:), 'descend'); num_pixels = numel(dark_channel); top_pixels = round(num_pixels * 0.1); atm_light = mean2(reshape(img(I(1:top_pixels), :), [], 3)); % 透射率估计 t = 1 - omega * dark_channel / atm_light(1); % 透射率优化 t = imguidedfilter(img, t); t(t < 0.1) = 0.1; % 去雾图像计算 J = zeros(size(img)); for k = 1:3 J(:, :, k) = (img(:, :, k) - atm_light(k))./ max(t, 0.1) + atm_light(k); end J = uint8(J); end function min_ch = minChannel(img) min_ch = min(img, [], 3); end function img_filtered = minFilter(img, w) img_padded = padarray(img, [w w], 'replicate'); img_filtered = zeros(size(img)); for k = 1:size(img, 3) img_filtered(:, :, k) = ordfilt2(img_padded(:, :, k), 1, ones(2 * w + 1)); end img_filtered = img_filtered(w + 1:end - w, w + 1:end - w, :); end

在这段代码中,dehaze函数实现了暗通道先验算法的主要流程。首先通过minChannelminFilter函数计算暗通道,然后估计大气光atm_light,接着计算透射率t并进行优化,最后根据透射率和大气光恢复出去雾后的图像J

图像增强,图像去雾,常用算法集合,Matlab实现。 包括:直方图算法,Retinex系列算法(SSR,MSR,MSRCR),暗通道先验算法。 代码都已调试好,可直接输入图像出结果。 去雾效果对比如图所示。

以上这些算法在图像增强和去雾方面都有各自的特点和优势,去雾效果对比如图所示(这里假设已经有相应的对比图展示)。通过Matlab的实现,我们可以方便地应用这些算法来处理实际的图像,提升图像的质量和清晰度。希望大家在实际项目中能够灵活运用这些算法,获取满意的图像处理效果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询