def underwater_image_enhancement(image): # 定义一些常量 alpha = 1.5 # 对比度增强系数 beta = 20 # 亮度增强系数 lambda_ = 0.2 # 模糊程度系数 limit = 2.0 # 限制像素缩放的系数 # 对比度增强 image_contrast = cv2.addWeighted(image, alpha, np.zeros(image.shape, image.dtype), 0, 0) # 亮度增强 image_bright = cv2.add(image_contrast, beta) # 颜色平衡 max_b = np.max(image_bright[:, :, 0]) max_g = np.max(image_bright[:, :, 1]) max_r = np.max(image_bright[:, :, 2]) max_value = max(max_b, max_g, max_r) if max_value > 1.0: image_bright[:, :, 0] = image_bright[:, :, 0] / max_value image_bright[:, :, 1] = image_bright[:, :, 1] / max_value image_bright[:, :, 2] = image_bright[:, :, 2] / max_value # 去雾 gray_image = cv2.cvtColor(image_bright, cv2.COLOR_BGR2GRAY) mean_gray = np.mean(gray_image) std_gray = np.std(gray_image) threshold = max(0, mean_gray - std_gray * lambda_) _, foreground_mask = cv2.threshold(gray_image, threshold, 255, cv2.THRESH_BINARY) kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) foreground_mask = cv2.erode(foreground_mask, kernel, iterations=1) background = cv2.medianBlur(image_bright, 21) foreground = cv2.medianBlur(image_bright, 3) foreground = cv2.addWeighted(foreground, limit, background, 1 - limit, 0) result = cv2.bitwise_and(foreground, foreground, mask=foreground_mask) return result
最新发布