摘要:水下图像因光线吸收、散射及水体介质特性,普遍存在色彩失真、对比度低及细节模糊等问题。本文提出一种融合局部颜色映射与颜色迁移的水下图像增强方法,通过构建基于水体光学特性的局部颜色校正模型,结合迁移学习技术实现跨场景颜色适配。实验表明,该方法在自然与工业水下环境中可有效恢复图像真实色彩,提升对比度并抑制噪声,在目标检测、图像分割等任务中表现优于传统方法。
关键词:水下图像增强;局部颜色映射;颜色迁移;水体光学特性;跨场景适配
水下环境的光学特性复杂,主要挑战包括:
传统方法存在以下缺陷:
本研究通过融合局部颜色映射与颜色迁移技术,旨在解决以下问题:

编辑

编辑

编辑

编辑
方法 PSNR↑ SSIM↑ UIQM↑ 灰度世界假设 18.23 0.65 2.10 本文方法 24.57 0.82 3.45
分析:本文方法在PSNR上提升34.7%,UIQM提升64.3%,有效校正色偏并恢复细节。
场景 传统方法mAP 本文方法mAP 浅海珊瑚礁 0.72 0.89 深海热液喷口 0.65 0.83
分析:在未见过场景中,本文方法目标检测mAP提升23.6%,证明颜色迁移的有效性。
在某沉船遗址探测中,原始图像因色偏无法识别船体铭文。应用本文方法后,铭文清晰度提升,文字识别准确率达92%。
在珊瑚礁生态监测中,本文方法使珊瑚种类识别准确率从78%提升至91%,为生态保护提供可靠数据。

编辑

编辑

编辑
部分代码:
function varargout = correction_gui(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @correction_gui_OpeningFcn, ...
'gui_OutputFcn', @correction_gui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before correction_gui is made visible.
function correction_gui_OpeningFcn(hObject, eventdata, handles, varargin)
% Choose default command line output for correction_gui
handles.output = hObject;
clc;
warning('off','all');
handles.basedir = pwd;
% Update handles structure
guidata(hObject, handles);
global LABcolorTransform;
global RGBcolorTransform;
LABcolorTransform = makecform('srgb2lab');
RGBcolorTransform = makecform('lab2srgb');
input_im=imread(fullfile(handles.basedir,'input_images','sample_4.jpg'));
handles.input_im = input_im;
axes(handles.input);
imshow(input_im);
ref_im=imread(fullfile(handles.basedir,'reference','2.jpg'));
handles.ref_im = ref_im;
axes(handles.reference);
imshow(ref_im);
load(fullfile(handles.basedir,'picked_colors','sample_4_picked_colors.mat'))
load(fullfile(handles.basedir,'params','sample_4_params.mat'))
handles.picked_colors = struct('picked_rbg', picked_rbg,'output_rbg',output_rbg);
stt1 = sprintf('%1.3f',lambds(1));
stt2 = sprintf('%1.3f',lambds(2));
stt3 = sprintf('%1.3f',lambds(3));
set(handles.lambda1, 'string',stt1);
set(handles.lambda2, 'string',stt2);
set(handles.lambda3, 'string',stt3);
% Update handles structure
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = correction_gui_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
% --- Executes on button press in load_input_im.
function load_input_im_Callback(hObject, eventdata, handles)
global input_im_path
[im_path,full_path] = uigetfile('*.jpg;*.png;','Image file (*.jpg,*.png)',fullfile(handles.basedir,'input_images'));
if (im_path==0)
return
end
full_im_path=fullfile(full_path,im_path);
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删