光照弱图像增强matlab代码
时间: 2023-07-02 20:03:55 浏览: 43
以下是一个简单的基于直方图均衡化的图像增强Matlab代码,可以用于增强光照弱的图像。你可以根据自己的需求进行调整。
```matlab
% 读取图像
img = imread('your_image.jpg');
% 转换为灰度图像
gray_img = rgb2gray(img);
% 直方图均衡化
eq_img = histeq(gray_img);
% 显示原始图像和增强后的图像
figure;
subplot(1,2,1);
imshow(gray_img);
title('Original Image');
subplot(1,2,2);
imshow(eq_img);
title('Enhanced Image');
```
注意,直方图均衡化可能会导致图像出现过度增强或失真的情况。因此,建议在实际应用中使用更复杂的图像增强算法,以达到更好的效果。
相关问题
基于多尺度retinex算法低光照彩色图片增强的MATLAB代码
以下是基于多尺度retinex算法低光照彩色图片增强的MATLAB代码示例:
```matlab
function [outimg] = MSR(img, a, b, alpha, beta, G)
% 基于多尺度retinex算法低光照彩色图片增强
% img: 输入图像
% a: 算法中的常数a
% b: 算法中的常数b
% alpha: 算法中的常数alpha
% beta: 算法中的常数beta
% G: 高斯卷积核大小
if nargin == 4
beta = 1;
G = 15;
elseif nargin == 5
G = 15;
end
% 将输入图像转化为double类型,范围为[0,1]
img = im2double(img);
% 对图像进行多尺度分解
scales = 3;
img = rgb2gray(img); % 将彩色图像转换为灰度图像
[height, width] = size(img);
for s = 1:scales
sigma = 2^(s-1);
img_g = imgaussfilt(img, G*sigma);
img_l = img - img_g;
img_l = imresize(img_l, [height, width], 'bilinear');
img_s(:,:,s) = img_l;
end
% 计算图像的全局平均值
mean_l = mean(mean(img_s(:,:,1)));
mean_c = mean(mean(mean(img)));
% 计算图像的权重
w = alpha*(mean_l/mean_c).^beta;
% 对图像进行增强
for s = 1:scales
img_s(:,:,s) = img_s(:,:,s)./(img_s(:,:,s) + a*w);
end
% 对增强后的图像进行加权重构
outimg = zeros(height, width, 3);
for s = 1:scales
sigma = 2^(s-1);
img_s(:,:,s) = imresize(img_s(:,:,s), [height, width], 'bilinear');
img_s(:,:,s) = imgaussfilt(img_s(:,:,s), G*sigma);
outimg = outimg + b*img_s(:,:,s);
end
outimg = outimg + (1-b)*img;
end
```
使用示例:
```matlab
img = imread('test.jpg');
outimg = MSR(img, 0.001, 0.75, 125, 1);
imshow(outimg);
```
retinex增强图像matlab代码
Retinex是一种用于图像增强的计算机视觉算法。它是根据人类视觉系统中的Retina和Cortex的工作原理而设计的。Retinex算法可用于消除光线不均匀以及增强图像的亮度和对比度等目的。
在Matlab中,可以使用以下代码实现Retinex图像增强:
```
function [result] = Retinex(im, sigma, G)
if nargin == 1
sigma = 60;
G = 46;
elseif nargin == 2
G = 46;
end
A = double(im); % 将图像数据转换为double类型
% 对每个颜色通道应用Retinex算法
for i=1:3
L = log(A(:,:,i));
L_max = max(L(:)); % 获取L的最大值
L_min = min(L(:)); % 获取L的最小值
L = (L - L_min) ./ (L_max - L_min); % 将L归一化为[0,1]之间的值
L = imgaussfilt(L,sigma); % 应用高斯滤波
A(:,:,i) = (G*log(1+L)) ./ log(1 + G); % 应用Retinex增强公式
end
result = uint8(A); % 将数据类型还原为uint8类型,在0到255之间进行裁剪
end
```
在该代码中,sigma是高斯滤波的标准差,G是Retinex增强公式中的参数。首先将图像数据转换为double类型,然后对每个颜色通道分别应用Retinex算法。算法的核心部分位于`A(:,:,i) = (G*log(1+L)) ./ log(1 + G);`代码行,其中的公式是Retinex增强公式。
最后,将数据类型还原为uint8类型,并在0到255之间进行裁剪,生成增强后的图像。使用该函数可以得到更加明亮和对比度更高的图像,也可以消除光照不均匀的问题,提高图像的质量和视觉效果。