给出基于直方图均衡化的图像去雾的matlab代码
时间: 2023-10-21 18:05:21 浏览: 46
以下是基于直方图均衡化的图像去雾的MATLAB代码:
```matlab
% 读入图像
img = imread('foggy_image.jpg');
% 显示原始图像
subplot(1,2,1),imshow(img);
title('Original Image');
% 计算暗通道先验
dark_channel = min(img,[],3);
% 计算全局大气光
atmospheric_light = max(dark_channel(:));
% 估算透射率
w = 0.95;
transmission = 1 - w * (double(dark_channel) / atmospheric_light);
% 限制透射率
transmission = min(max(transmission,0),1);
% 去雾
dehazed_image = zeros(size(img));
for i = 1:3
% 基于直方图均衡化的图像去雾
dehazed_image(:,:,i) = histeq((double(img(:,:,i)) - atmospheric_light) ./ transmission + atmospheric_light / 2);
end
% 显示去雾结果
subplot(1,2,2),imshow(uint8(dehazed_image));
title('Dehazed Image');
```
需要注意的是,这里的输入图像是名为"foggy_image.jpg"的图像,需要根据实际情况进行修改。
相关问题
matlab视觉设计图像去雾直方图均衡化代码
以下是使用Matlab进行图像去雾的直方图均衡化的代码示例:
```matlab
% 读取图像
image = imread('input_image.jpg');
% 将RGB图像转换为灰度图像
gray_image = rgb2gray(image);
% 对灰度图像进行直方图均衡化
equalized_image = histeq(gray_image);
% 显示原始图像和直方图均衡化后的图像
subplot(1, 2, 1);
imshow(gray_image);
title('原始图像');
subplot(1, 2, 2);
imshow(equalized_image);
title('直方图均衡化后的图像');
```
这段代码首先读取输入图像,然后将RGB图像转换为灰度图像。接下来,使用`histeq`函数对灰度图像进行直方图均衡化处理。最后,使用`imshow`函数显示原始图像和直方图均衡化后的图像。
请注意,你需要将代码中的`input_image.jpg`替换为你自己的图像文件路径。
局部分块直方图均衡化去雾matlab
实现局部分块直方图均衡化去雾的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`函数进行局部分块直方图均衡化,并根据深度图像计算每个块的增益系数。最终得到去雾后的图像。