📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现
1概述
针对水下光的吸收和散射作用,水下图像往往存在颜色失真、对比度低、细节模糊等现象,提出了一种新的水下图像增强算法。首先,以颜色校正的方式改进了一种基于暗通道先验(DCP)的水上图像增强方法,使其可以更好地用于水下图像,并将增强后的图像作为图像融合的一个输入。然后,利用非锐化掩蔽(USM)增强图像的纹理特征,并将再次增强的图像作为图像融合的另一个输入。最后,采用小波融合的方式对以上两个输入图像进行融合,进一步提升图像质量。与其他方法的比较结果表明,利用所提方法增强的图像具有更自然的外观、更高的清晰度、更多的细节和边缘信息,所提方法对水下图像有良好的增强效果。基于颜色校正方法对水下图像进行颜色均衡化预处理;对亮度分量L进行Gamma校正,获得对比度提升的亮度图像;对两个亮度分量进行三层小波分解,提出对分解所得的低频分量及高频分量分别采用线性融合和自适应融合策略进行融合。多尺度融合保证了增强图像细节的丰富性,自适应融合策略体现了融合过程的可控性。实验结果表明,增强的水下图像呈现出高对比度和清晰的细节。水下图像融合增强是指对水下图像进行处理,将多个水下图像融合在一起,并增强图像的质量和清晰度的技术。水下环境中,由于水的折射、散射和吸收等因素的影响,导致水下图像的质量较差,图像中的细节和颜色信息都会受到损失。因此,水下图像融合增强的目的是通过融合多个水下图像,利用图像处理算法来提高图像的质量和清晰度。水下图像融合增强的具体步骤包括以下几个方面:1. 图像对齐:由于水下环境中的水流等因素的影响,水下图像可能存在一定的偏移和旋转。因此,首先需要对图像进行对齐,使得它们具有相同的位置和方向。2. 图像融合:将对齐后的图像进行融合,可以采用像素级融合或者特征级融合的方法。像素级融合是将多个图像的像素值进行加权平均,得到融合后的图像。特征级融合则是提取图像的特征,如边缘、纹理等,然后将这些特征进行融合。3. 图像增强:对融合后的图像进行增强处理,包括去噪、增加对比度、调整亮度等。可以采用图像处理算法,如小波变换、直方图均衡化等来实现图像增强。4. 结果评估:对增强后的图像进行评估,可以使用图像质量评价指标,如峰值信噪比(PSNR)、结构相似性指标(SSIM)等来评估图像的质量。水下图像融合增强技术可以应用于水下摄像、水下探测等领域,可以提高水下图像的质量和清晰度,使得图像更适合用于分析、识别和检测等应用。
2运行结果
部分代码:
clc;
clear all;
close all;
im = imread('./image/8.jpg');
figure,imshow(im),xlabel('origin image');
% red channel recover
im1 = redCompensate(im,5);
figure, subplot(2,2,1)
imshow(im1);
xlabel('red channel compensate');
% blue channel recover
% In murky waters or high water levels or the presence of plankton in abundance that causes the blue channel to attenuate strongly,Supplement the blue channel
% im1 = blueCompensate(im1);
% subplot(2,3,3)
% imshow(im1);
% xlabel('blue channel compensate')
% white balance enhancement
im2 = simple_color_balance(im1);
subplot(2,2,2)
imshow(im2);
xlabel('white balance');
% gamma correction
input1 = gammaCorrection(im2,1,1.2);
subplot(2,2,3)
imshow(input1);
xlabel('gamma correction');
% sharpen
input2 = sharp(im2);
subplot(2,2,4)
imshow(input2);
xlabel('sharp');
%.................................................%
% calculate weight
%.................................................%
lab1 = rgb_to_lab(input1);
lab2 = rgb_to_lab(input2);
R1 = double(lab1(:, :, 1)/255);
R2 = double(lab2(:, :, 1)/255);
% 1. Laplacian contrast weight (Laplacian filiter on input luminance channel)
WL1 = abs(imfilter(R1, fspecial('Laplacian'), 'replicate', 'conv'));
WL2 = abs(imfilter(R2, fspecial('Laplacian'), 'replicate', 'conv'));
% 2. Saliency weight
WS1 = saliency_detection(input1);
WS2 = saliency_detection(input2);
% 3. Saturation weight
WSat1 = Saturation_weight(input1);
WSat2 = Saturation_weight(input2);
% normalized weight
[W1, W2] = norm_weight(WL1, WS1, WSat1, WL2 , WS2, WSat2);
%.................................................%
% image fusion
% R(x,y) = sum G{W} * L{I}
%.................................................%
level = 3;
% weight gaussian pyramid
Weight1 = gaussian_pyramid(W1, level);
Weight2 = gaussian_pyramid(W2, level);
% image laplacian pyramid
% input1
r1 = laplacian_pyramid(double(double(input1(:, :, 1))), level);
g1 = laplacian_pyramid(double(double(input1(:, :, 2))), level);
b1 = laplacian_pyramid(double(double(input1(:, :, 3))), level);
% input2
r2 = laplacian_pyramid(double(double(input2(:, :, 1))), level);
g2 = laplacian_pyramid(double(double(input2(:, :, 2))), level);
b2 = laplacian_pyramid(double(double(input2(:, :, 3))), level);
% fusion
for i = 1 : level
R_r{i} = Weight1{i} .* r1{i