水下图像增强算法python
时间: 2023-10-24 21:22:18 浏览: 232
水下图像增强算法可以采用以下几种方法:
1. 去雾:水下图像中往往存在雾化现象,可以使用去雾算法将图像中的雾去除,使图像更加清晰。
2. 白平衡:水下图像中颜色偏差较大,可以使用白平衡算法来调整图像的颜色,使其更加真实。
3. 对比度增强:水下图像中的对比度较弱,可以使用对比度增强算法来增强图像的对比度,使其更加清晰。
以下是使用Python实现的一些水下图像增强算法:
1. 去雾
```python
import cv2
import numpy as np
def dehaze(img, t_min=0.1, A_max=1):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)
gray = cv2.GaussianBlur(gray, (21, 21), 0)
h, w = img.shape[:2]
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
v = hsv[:, :, 2]
atm_light = np.percentile(v, 99)
t = np.zeros((h, w))
for i in range(h):
for j in range(w):
if v[i, j] < t_min*atm_light:
t[i, j] = 1
else:
t[i, j] = 1 - A_max * (v[i, j] - t_min*atm_light) / (atm_light*(1-t_min))
t = cv2.medianBlur(t.astype(np.float32), 5)
result = np.zeros(img.shape, dtype=np.float32)
for i in range(3):
img_i = img[:, :, i].astype(np.float32)
img_i = (img_i - atm_light) / np.maximum(t, 0.1) + atm_light
result[:, :, i] = np.uint8(np.clip(img_i, 0, 255))
return result
```
2. 白平衡
```python
import cv2
import numpy as np
def white_balance(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hist, bins = np.histogram(gray.flatten(), 256, [0, 256])
cdf = hist.cumsum()
cdf_normalized = cdf / cdf.max()
cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m - cdf_m.min()) * 255 / (cdf_m.max() - cdf_m.min())
cdf = np.ma.filled(cdf_m, 0).astype('uint8')
img_eq = cdf[gray]
img_eq = cv2.cvtColor(cv2.merge((hsv[:, :, 0], img_eq, hsv[:, :, 2])), cv2.COLOR_HSV2BGR)
return img_eq
```
3. 对比度增强
```python
import cv2
def contrast_stretching(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
min_val = gray.min()
max_val = gray.max()
a = 255 / (max_val - min_val)
b = 255 - a * max_val
result = cv2.convertScaleAbs(img, alpha=a, beta=b)
return result
```
以上是一些简单的水下图像增强算法的Python实现。如果需要更加高级的增强算法,建议使用专业的水下图像增强软件或者库。
阅读全文