局部分块直方图均衡化去雾matlab
时间: 2023-06-19 08:05:19 浏览: 112
实现局部分块直方图均衡化去雾的MATLAB代码如下:
```matlab
% 读取原始图像和深度图
img = imread('input.jpg');
depth = imread('depth.jpg');
% 转换为灰度图像
imgGray = rgb2gray(img);
% 将深度图像归一化到[0,1]范围内
depthNorm = double(depth)/255;
% 设置参数
winSize = 15; % 分块大小
k0 = 0.1; % 全局增益系数
k1 = 0.15; % 局部增益系数
% 分块直方图均衡化
imgEnh = zeros(size(imgGray));
for i = 1:size(imgGray,1)/winSize
for j = 1:size(imgGray,2)/winSize
% 计算当前块的范围
rowStart = (i-1)*winSize+1;
colStart = (j-1)*winSize+1;
rowEnd = min(rowStart+winSize-1,size(imgGray,1));
colEnd = min(colStart+winSize-1,size(imgGray,2));
% 提取当前块的图像和深度图像
imgBlock = imgGray(rowStart:rowEnd,colStart:colEnd);
depthBlock = depthNorm(rowStart:rowEnd,colStart:colEnd);
% 计算当前块的全局均值和标准差
mu = mean(imgBlock(:));
sigma = std(imgBlock(:));
% 计算当前块的局部均值和标准差
muL = mean(imgBlock(depthBlock>k0*sigma & imgBlock>mu));
sigmaL = std(imgBlock(depthBlock>k0*sigma & imgBlock>mu));
% 计算当前块的增益系数
k = k1*sigma/sigmaL + (1-k1)*mu/muL;
% 应用直方图均衡化
imgEnh(rowStart:rowEnd,colStart:colEnd) = adapthisteq(imgBlock,'NumTiles',[1 1],'ClipLimit',k);
end
end
% 显示结果
subplot(1,2,1);
imshow(img);
title('原始图像');
subplot(1,2,2);
imshow(imgEnh);
title('去雾结果');
```
代码中使用`adapthisteq`函数进行局部分块直方图均衡化,并根据深度图像计算每个块的增益系数。最终得到去雾后的图像。
阅读全文