偏振差分水下去雾原理

最近一段时间,一直在了解去雾的相关算法,这篇简单介绍一下自己对于偏振差分水下去雾的理解。

水下成像模型与大气物理退化模型相同,由探测器接收的光线辐射强度主要来自两个方面。(1)目标的反射光也称直接透射光,主要包括目标的强度信息;(2)由于光经过水中悬浮颗粒散射而导致的杂散光。水下成像模型示意图如下图所示:

目标反射光在水中传播过程中由于水体中悬浮颗粒的强散射和吸收效应,到达探测器的直接透射光强随传输距离呈现指数衰减:

    (1)

其中,表示目标透射光,表示图像中的像素位置,表示目标的真实反射光强,表示水中的光线传输透过率,可以表示为:

                         (2)

在(2式中)代表衰减系数,用来量化表示水体对光线的的吸收与散射效应。在我们的研究过程中将假定为常数,用来表示,此时,透过率只受限于距离。

区别于直接透射光,杂散光是由光线经过水中悬浮颗粒散射到探测器上,通常称之为后向散射,后向散射可以表示为:

其中对应于在水中延伸到无穷远处的后向散射值。到达探测器的总光强是直接透射光强和后向散射光强的非相干叠加,可表示为:

其中对应于在水中延伸到无穷远处的后向散射值。到达探测器的总光强是直接透射光强和后向散射光强的非相干叠加,可表示为:

上式经过变形可以得到所需的复原图像的表达式:

其中透过率可以变形为:其中,

采用偏振差分成像方式去雾实现图像复原,在相机前端安装线偏振片,通过旋转偏振片获取处于正交位置的两幅图像,进行差分成像。在这个过程中,相机采集到的两幅正交图像可以表示为:

后向散射的偏振度(DOP)可以表示为:

对于后向散射偏振度的计算过程,一般截取正交偏振图片中背景区域的一部分,如下图所示,进行拟合或者求平均的方式,得到整幅图像的偏振度,这里我们采用求平均的方式,将整幅图像的偏振度用黄色区域的偏振度均值来替代,同时对选取的区域计算后向散射值,一般将整幅图像的后向散射值也用黄色区域的后向散射均值来替代。

                        0度偏振图像                                                           90度偏振图像

在实际操作中,可以发现当选定区域位置、大小不同时,所对应的以及值也会发生变化,这会影响图像复原结果。 因此,我们引入修正系数w对及进行修正,则透过率t变形为:

求解透过率后,可以进一步代入式子,对图像进行去雾操作。效果图如下所示:

可以看到,图像去雾效果明显,其中钥匙的细节信息得到很好地保留。

### 关于MATLAB中实现灰度图像偏振算法 在处理灰度图像的偏振方面,可以基于偏振特性来减少大气散射的影响。由于提供的参考资料未直接提及具体的偏振算法细节,在此提供一种常见的偏振框架,并给出相应的MATLAB代码示例。 #### 灰度图像偏振基本流程 偏振主要依赖于自然光经过空气分子和其他颗粒物质散射后形成的线性偏振现象。通过分析不同角度拍摄到的同一场景图片之间的差异,能够有效估计并除由霾引起的模糊效应[^1]。 ```matlab function restoredImage = polarizationDehaze(grayImages, angles) % POLARIZATIONDEHAZE performs dehazing on a set of gray images taken at different polarizer orientations. % % Inputs: % grayImages - A cell array containing the grayscale images captured with varying polarizer angles. % angles - Corresponding polarizer rotation angles (degrees). numAngles = length(angles); if numAngles ~= numel(grayImages) error('Number of input images must match number of provided angles.'); end % Convert to radians and compute cos^2(theta) for each angle cosSquaredTheta = cosd(angles).^2; % Initialize variables sumI = zeros(size(grayImages{1})); sumICosSq = sumI; for i = 1:numAngles img = double(grayImages{i}); sumI = sumI + img; sumICosSq = sumICosSq + img .* cosSquaredTheta(i); end % Estimate atmospheric light component using average intensity across all views atmLightEstimate = mean(sumI(:)) / numAngles; % Calculate transmission map based on Stokes parameters approximation transmissionMap = (sumICosSq ./ sumI) - atmLightEstimate; % Normalize transmission between [0,1], avoiding division by zero issues minTrans = min(transmissionMap(:)); maxTrans = max(transmissionMap(:)); normalizedTransmission = (transmissionMap - minTrans) / (maxTrans - minTrans); % Apply inverse filtering to recover scene radiance from observed intensities restoredImage = uint8(zeros(size(grayImages{1}))); for i = 1:numAngles restoredImage = restoredImage + ... ((double(grayImages{i}) - atmLightEstimate) ./ normalizedTransmission) * cosSquaredTheta(i); end restoredImage = uint8(restoredImage / numAngles + atmLightEstimate); ``` 该脚本接受一组在同一位置但具有不同偏振方向滤波器条件下获取的灰度级影像作为输入,并返回一张经过霾处理后的合成图像。注意实际应用时可能还需要考虑更多因素如相机响应非理想化、噪声抑制等。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值