实现了3种算法提取云量

This commit is contained in:
2022-05-13 17:52:00 +08:00
parent 9c2b85e53d
commit 739d8bd16c

89
cloudage.py Normal file
View File

@ -0,0 +1,89 @@
import datetime, math, os, sys, logging
import cv2
import numpy as np
def f1(image_path):
# Load an image
img = cv2.imread(image_path)
# img = cv2.imread(image_path, 0) # Load an image in grayscale
b, g, r = cv2.split(img)
cloud = r / b
ret, cloud_BINARY = cv2.threshold(cloud, 0.6, 255, cv2.THRESH_BINARY) # 文献中推荐阈值为0.6
cloudage = cloud_BINARY.sum() / (cloud_BINARY.size * 255)
print("r/b算法云量为%f\n" % cloudage)
tmp = image_path.split('.')
out = tmp[0] + "_r_b." + tmp[1]
cv2.imwrite(out, cloud_BINARY)
# cv2.imshow('image', cloud_BINARY)
cv2.waitKey(0)
cv2.destroyAllWindows()
def f2(image_path):
img = cv2.imread(image_path)
b, g, r = cv2.split(img)
cloud = (b-r) / (b+r)
ret, cloud_BINARY = cv2.threshold(cloud, 0.2, 255, cv2.THRESH_BINARY_INV)
cloudage = cloud_BINARY.sum() / (cloud_BINARY.size * 255)
print("(b-r) / (b+r)算法,云量为%f\n" % cloudage)
tmp = image_path.split('.')
out = tmp[0] + "_(b-r)_(b+r)." + tmp[1]
cv2.imwrite(out, cloud_BINARY)
# cv2.imshow('image', cloud_BINARY)
cv2.waitKey(0)
cv2.destroyAllWindows()
def f3(image_path):
img = cv2.imread(image_path)
b, g, r = cv2.split(img)
# # 转到HSV空间
# hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# h, s, v = cv2.split(hsv)
# 转到HLS空间
hls = cv2.cvtColor(img, cv2.COLOR_BGR2HLS) # 这就是ihs颜色空间
h, l, s = cv2.split(hls)
μ_Clouds = 12.7
σ_Clouds = 3.7
μ_sky = 45.3
σ_sky = 4.4
# np.where用法https://www.zhihu.com/question/62844162
clouds_loc = np.where(s < μ_Clouds + 3 * σ_Clouds) # 厚云
sky_loc = np.where(s > μ_sky - 3 * σ_sky) # 天空
unknow_loc = np.where((μ_Clouds + 3 * σ_Clouds <= s) & (s <= μ_sky - 3 * σ_sky)) # 薄云
s[sky_loc] = 1
s[clouds_loc] = 2
s[unknow_loc] = 3
tmp = image_path.split('.')
out = tmp[0] + "_saturation." + tmp[1]
cv2.imwrite(out, s)
# cv2.imshow('image', cloud_BINARY)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
image_path = r'D:\PycharmProjects\cloudage\photo\photo7.jpg'
# image_path = r'D:\PycharmProjects\cloudage\photo\cloud1_perfect.jpg' # f3全为天空
f1(image_path)
f2(image_path)
f3(image_path)