opencv 图片去雾算法
时间: 2023-11-02 10:07:09 浏览: 89
OpenCV 中提供了一些去雾算法,以下是其中两种比较常用的算法:
1. 基于暗通道先验的去雾算法:
该算法的基本思想是利用图像中的暗通道先验,通过估计图像中的全局大气光来去除雾霾。具体步骤如下:
1.1 计算暗通道
对于输入的彩色图像 $I(x)$,我们首先需要计算出该图像的暗通道 $J(x)$,公式如下:
$$
J(x)=\min_{c\in\{R,G,B\}}(I_c(x))
$$
其中,$c$ 表示颜色通道,$R,G,B$ 分别表示红、绿、蓝三个颜色通道。
1.2 估计大气光
在暗通道图像上进行滤波,得到最亮的像素点,即为图像中的大气光 $A$。具体做法是对暗通道图像进行一定半径的最大值滤波,得到一幅图像 $J_{max}(x)$,然后在 $J_{max}(x)$ 中找到一个像素点 $p$,使得:
$$
A=\max_{p\in I}J_{max}(p)
$$
1.3 恢复图像
根据大气光的估计值,我们可以得到恢复后的图像 $I_t(x)$,公式如下:
$$
I_t(x)=\frac{I(x)-A}{\max(\alpha(x),t)}+A
$$
其中,$t$ 是一个常数,用来控制图像的对比度,$\alpha(x)$ 是透射率,可以通过下面的公式计算得到:
$$
\alpha(x)=1-\omega\min_{c\in\{R,G,B\}}\left(\frac{I_c(x)}{A}\right)
$$
其中,$\omega$ 是一个常数,用来控制透射率的平滑程度。
2. 基于暗通道先验和双边滤波的去雾算法:
该算法在基于暗通道先验的算法基础上,加入了双边滤波,可以更好地保留图像的细节。具体步骤如下:
2.1 估计大气光
同基于暗通道先验的算法。
2.2 估计透射率
对原始图像进行双边滤波,得到模糊图像 $I_b(x)$,然后在模糊图像上进行暗通道先验计算,得到透射率 $\alpha(x)$。
2.3 恢复图像
同基于暗通道先验的算法。
以上就是 OpenCV 中两种常见的去雾算法。你可以在 OpenCV 的文档中找到相应的 API 和使用方法。
阅读全文