自动驾驶之去光晕调研

中文版综述github

一、光晕类型

  • 常见去光晕算法的光晕

  • 去光晕算法的光晕之二(汇总)

样式包括有: halos(色圈), streaks(条纹), bright lines(亮线), saturated blobs(深污点), color bleeding(色渗), haze(烟雾), and many others。

二、光晕成因

一个理想的相机,当对焦时,应该支持从单个点光源射出的所有光线都可折射收敛到同一点(灰色)。
在实际中,真实的镜头散射和反射光沿着计划之外的路径,导致了光晕(蓝色和橙色)。

尽管这些光晕是无处不在的,在大部分图像中都是微不足道的。但是 当一个亮光源比其他部分亮度高几个量级时,这些小部分的散射和折射光会导致视觉上的光晕。

光晕主要分为两种: 散射导致的和折射导致的。

  • 散射光晕

    • 来源: 镜头瑕疵。包括工业瑕疵(例如压痕)、正常磨损(例如灰尘或刮痕)。
    • 成因: 大部分光线折射,而少部分光线散射或衍射,而不是沿着他们的既定路径. 灰尘导致类似于彩虹的效应,而刮痕导致放射性的条纹。散射也会降低光晕附近的对比度,导致朦胧的现象。
  • 反射光晕:
    来源: 在实际的镜头系统中,每个空气-镜片交界面会有 4 % 4\% 4%的反射。经过这些反射,光线到达镜头传感器的非既定位置。
    硬件方案: AR技术可以将空气-镜面界面的反射小于1%。但是该方法的有效性依赖于波长,所以这些光晕可能存在多种颜色,例如蓝色、粉色和紫色。

三、解决方案

3.1 硬件方案

高端相机使用精密的光流设计和材料来减少光晕。伴随着一些glass element加到镜头上来提高图像质量,同时也降低了从镜面反射的概率,常采用的技术是加入anti-reflective(AR) 涂层。这些涂层是昂贵的。

3.2 软件方案

基于镜头光晕的独一无二的shape、location或intensity检测光晕。然后使用图像修补来恢复光晕区域的flare.。但仅对部分类型的光晕点有效(例如bright spots)。

3.2.1 Automated Lens Flare Removal 2015

  • 方案:
    检测光晕 -> 恢复原图

1. Multiple Thresholding: 将图像转换为灰度图,使用一系列阈值进行二值化。
2. Contour Detection: 对每个二值化的图,找到轮廓。
3. Blob Merging: 计算每个blob的中心,以距离和相似度为度量,对所有二值化图像的blob融合,获取一系列的潜在可能的光晕候选。
4. Flare Candidates Filtering: 对候选框使用一些规则进行筛选。
5. Flare Mask Computation: 计算Flare Mask

在这里插入图片描述

3.2.2 Automatic Flare Spot Artifact Detection and Removal in Photographs. 2021

主要步骤:

  • 光源检测
  • 光晕点检测
    • Blob检测
    • 检测光晕点范围
    • 拒绝细长的Blobs
    • 在光晕点附近过度曝光
    • 最终光晕点的置信度度量
  • 光晕移除
    • 创建光晕点mask
    • 移除光晕
      在这里插入图片描述

3.2.3 Auto Removal of Bright Spot from Images Captured Against Flashing Light Source

主要处理: 太阳光源或/flashing光源下经常在背景出现的bright spot的问题。

原因: 光线通过光圈不完美反射或散射,或者不合适的入射角。

方案: 检测亮点->修复技术填充亮点区域。
在这里插入图片描述

3.2.4 data-driven方法

How to Train Neural Networks for Flare Removal (ICCV2021)
有数据集; 有训练代码; 模型权重需要自己训练。

  • 散射光晕的物理模型和光晕获取
    根据薄透镜(thin-len) 近似, 由pupil function
    P ( u , v ) P(u,v) P(u,v): 对于每光圈平面(aperture plane)上的点 ( u , v ) (u,v) (u,v), 镜头对波长为 λ \lambda λ入射波(an incident wave)振幅(amplityde)和相位(phase)的影响为:
    在这里插入图片描述

    其中, A A A为光圈方程,描述了光流的性质,表示了它入射波的衰减。简单形式下,含有光圈半径为 r r r的相机有如下光圈方程:
    在这里插入图片描述

ϕ λ \phi_{\lambda} ϕλ描述了相移(phase shift),依赖于波长和光源的3D位置 x , y , z x,y,z x,y,z,
在这里插入图片描述

ϕ S \phi^S ϕS由入射角决定,散角 ϕ D F \phi^{DF} ϕDF由光源的深度 z z z决定.

点扩散方程由傅里叶变换:
在这里插入图片描述

Sampling PSFs: 为了模仿灰尘和刮痕,在光圈方程 A A A上添加随机大小的点。共生成125个不同光圈。

在这里插入图片描述

  • 反射光晕和光晕获取

很难通过精准的光流计算,因此在实验室环境内获取。

  • 人造训练集
    在这里插入图片描述

  • 模型训练结果
    注意要把光源保留
    在这里插入图片描述
    在这里插入图片描述

3.3 软硬件结合方案

结合3.1和3.2.

三、其它自动驾驶夜晚红绿灯方案

红绿灯模块根据自身的位置查找地图,可以获得前方红绿灯的坐标位置。通过标定参数,可以将红绿灯从世界坐标系投影到图像坐标系,从而完成相机的自适应选择切换。选定相机后,在投影区域外选取一个较大的感兴趣区域,在其中运行红绿灯检测来获得精确的红绿灯框位置,并根据此红绿灯框的位置进行红绿灯的颜色识别,得到红绿灯当前的状态。得到单帧的红绿灯状态后,通过时序的滤波矫正算法进一步确认红绿灯的最终状态。我们提出的基于CNN的红绿灯的检测和识别算法具有极高的召回率和准确率,可以支持白天和夜晚的红绿灯检测识别。

<think>好的,我现在需要帮助用户找到用Matlab去除图像眩光效果的代码示例。首先,我需要理解眩光是什么。眩光通常是由于强光直接照射到镜头或反射到镜头中,导致图像局部过亮或出现光斑,影响图像质量。去除眩光的方法可能包括调整亮度、对比度,或者使用更复杂的算法如Retinex理论或同态滤波。 接下来,我应该回忆一下Matlab中常用的图像处理工具包,比如Image Processing Toolbox。用户可能希望有一个具体的代码示例,所以我需要构思一个可能的流程。首先读取图像,转换为灰度图或处理RGB各通道。然后,可能需要应用某种滤波或增强技术来减少眩光的影响。 常见的眩光方法可能包括: 1. **直方图均衡化**:增强对比度,可能有助于减轻眩光区域的影响。 2. **同态滤波**:用于调整图像的照明和反射分量,适合处理因光照不均引起的问题。 3. **Retinex算法**:用于处理光照变化,增强图像细节。 4. **亮度调整**:比如使用gamma校正来压缩高光区域的亮度。 5. **形态学操作**:可能需要结合腐蚀或膨胀来处理特定区域的光斑。 我需要确保代码示例的正确性,并且符合Matlab的语法。例如,使用`imread`读取图像,`rgb2gray`转换灰度,或者处理RGB通道。然后应用滤波或算法步骤。可能需要参考现有的方法,比如同态滤波的实现步骤:对图像取对数,进行傅里叶变换,应用滤波器,逆变换,取指数等。 同时,要注意用户提供的引用中提到了Sobel边缘检测的代码,所以可能需要保持代码结构类似,简洁明了,步骤清晰。比如: 1. 读取图像 2. 转换为合适的颜色空间 3. 应用滤波或算法处理眩光 4. 显示结果 另外,用户可能没有专业的图像处理知识,所以代码中的参数需要合理,或者给出调整的建议,如调整gamma值或滤波器参数。 最后,生成相关问题需要考虑用户可能的后续疑问,比如如何评估眩光效果,其他相关算法,或者如何处理不同情况下的眩光问题等。</think>以下是基于同态滤波和颜色校正的Matlab眩光代码示例,适用于处理光照不均导致的眩光现象: ```matlab % 读取原始图像 originalImage = imread('high_glare.jpg'); figure; imshow(originalImage); title('原始图像'); % 转换为HSV颜色空间处理亮度分量 hsvImg = rgb2hsv(originalImage); V = hsvImg(:,:,3); % 同态滤波参数设置 D0 = 50; % 截止频率(根据图像尺寸调整) gammaH = 1.5; % 高频增益 gammaL = 0.5; % 低频增益 % 执行同态滤波 filteredV = homomorphic_filter(V, D0, gammaH, gammaL); % 合并处理后的亮度通道 hsvImg(:,:,3) = filteredV; restoredImg = hsv2rgb(hsvImg); % 显示处理结果 figure; imshow(restoredImg); title('眩光处理结果'); % 同态滤波函数定义 function output = homomorphic_filter(input, D0, gammaH, gammaL) [M, N] = size(input); lnInput = log(double(input) + 1e-6); % 避免log(0) % 傅里叶变换 F = fft2(lnInput); % 创建高斯高通滤波器 u = 0:(M-1); v = 0:(N-1); [V, U] = meshgrid(v, u); D = sqrt((U-M/2).^2 + (V-N/2).^2); H = (gammaH - gammaL)*(1 - exp(-(D.^2)./(2*D0^2))) + gammaL; % 频域滤波 filtered = H .* F; % 逆傅里叶变换 output = real(ifft2(filtered)); output = exp(output) - 1e-6; % 指数补偿 output = mat2gray(output); % 归一化 end ``` 关键处理步骤说明: 1. 转换到HSV颜色空间独立处理亮度分量,避免颜色失真[^1] 2. 使用同态滤波分离光照分量和反射分量 3. 通过高斯滤波器抑制低频光照分量(眩光) 4. 增强高频细节信息 5. 颜色空间转换保持自然色彩过渡
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值