使用pytharm完成无人机航拍图像去雾选择什么算法以及使用该算法完成去雾的相关程序
时间: 2024-03-25 17:41:21 浏览: 65
针对无人机航拍图像去雾问题,可以使用以下算法:
1. 直方图均衡化算法
2. 暗通道先验算法
3. 基于颜色空间的去雾算法
4. 基于深度学习的去雾算法
其中,暗通道先验算法是一种较为常用的去雾算法,可选择该算法完成去雾的相关程序。
以下是使用Python实现暗通道先验算法完成无人机航拍图像去雾的示例代码:
```python
import cv2
import numpy as np
def dark_channel(img, size):
b, g, r = cv2.split(img)
dc = cv2.min(cv2.min(r, g), b)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (size, size))
dark = cv2.erode(dc, kernel)
return dark
def atm_light(img, dark):
[h, w] = img.shape[:2]
imsize = h * w
numpx = max(int(imsize / 1000), 1)
darkvec = dark.reshape(imsize, 1)
imgvec = img.reshape(imsize, 3)
indices = np.argsort(darkvec, 0)
indices = indices[imsize - numpx::]
atmsum = np.zeros([1, 3])
for ind in range(1, numpx):
atmsum = atmsum + imgvec[indices[ind]]
A = atmsum / numpx
return A
def transmission(img, A, size):
omega = 0.95
im3 = np.zeros(img.shape, img.dtype)
for ind in range(0, 3):
im3[:, :, ind] = img[:, :, ind] / A[0, ind]
transmission = 1 - omega * dark_channel(im3, size)
return transmission
def dehaze(img, t, A, tx=0.1):
res = np.zeros(img.shape, img.dtype)
t = cv2.max(t, tx)
for ind in range(0, 3):
res[:, :, ind] = (img[:, :, ind] - A[0, ind]) / t + A[0, ind]
return res
if __name__ == '__main__':
img = cv2.imread('image.jpg')
I = img.astype('float64') / 255
dark = dark_channel(I, 15)
A = atm_light(I, dark)
t = transmission(I, A, 15)
J = dehaze(I, t, A)
cv2.imshow('Original Image', img)
cv2.imshow('Dehazed Image', J)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`img`为输入的无人机航拍图像,`dark_channel`函数用于计算暗通道,`atm_light`函数用于估计大气光,`transmission`函数用于计算透射率,`dehaze`函数用于去雾。
该代码使用OpenCV库实现,将输入图像先进行归一化处理,然后分别计算暗通道、大气光、透射率和去雾图像。最后,将原图像和去雾后的图像通过OpenCV库显示出来。
需要注意的是,该代码中的参数值(如窗口大小、透射率阈值等)需要根据实际情况进行调整。
阅读全文