去除图像中的阴影是一项复杂的图像处理任务,尤其是当阴影区域与图像的其他部分混合时。阴影的存在会影响图像的颜色平衡和亮度,导致图像分析和理解的困难。
目录
一 安装依赖
二 函数
① rgb2hsv
② hsv2rgb
三 实现图像中的阴影去除的方法
四 实践
① 代码
② 效果图
五 结论
去除阴影的方法包括基于色彩校正、图像分割以及深度学习的技术。图像分割可以用来识别阴影区域,然后单独处理这些区域。常用的技术包括阈值分割、区域生长、分水岭算法等。深度学习方法卷积神经网络(CNNs),可以非常有效地去除阴影。通过数据集进行模型训练,以便网络学习如何区分阴影和非阴影区域。
一 安装依赖
通过以下命令安装相关依赖:
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install scikit-image
二 函数
scikit-image库提供了颜色空间转换功能,其中包括从 RGB 到 HSV 和从 HSV 回到 RGB 的转换。
① rgb2hsv
函数用于将 RGB 图像转换为 HSV(色调、饱和度、明度)颜色空间。HSV 颜色空间通常更接近人类对颜色的感知方式。
skimage.color.rgb2hsv(rgb)
输入参数
rgb:输入的 RGB 图像。
返回值
返回一个形状相同的数组,但颜色空间为 HSV。
② hsv2rgb
函数的作用将 HSV 图像转换回 RGB 图像。
skimage.color.hsv2rgb(hsv)
输入参数
hsv:输入的 HSV 图像。
返回值
返回一个形状相同的数组,但颜色空间为 RGB。
三 实现图像中的阴影去除的方法
① 读取输入的图像。
② 色彩空间转换
使用rgb2hsv函数将RGB图像转换为HSV色彩空间。
③ 图像分割
使用Otsu阈值分割技术在V通道上检测阴影区域。
④ 阴影区域处理
对检测到的阴影区域进行亮度增强,以模拟去除阴影的效果。
⑤ 色彩空间转换
使用hsv2rgb函数将HSV 图像转换为RGB色彩空间。
⑥ 显示和保存结果
显示原始图像和阴影去除结果图像。保存阴影去除效果图像。
四 实践
① 代码
import cv2
import numpy as np
from skimage.color import rgb2hsv, hsv2rgb
from skimage.filters import threshold_otsudef detect_and_remove_shadow(image_path):# 读取图像img = cv2.imread(image_path)img_hsv = rgb2hsv(img)# HSV色彩空间中的V通道用于阴影检测v_channel = img_hsv[:, :, 2]# 使用Otsu阈值分割进行阴影检测thresh = threshold_otsu(v_channel)shadow_mask = v_channel < thresh# 对阴影区域进行亮度增强shadow_region = img_hsv[:, :, :].copy()# 创建增强因子数组enhancement_factors = np.array([1, 1, 1.52])# 确保阴影区域的增强操作在每个颜色通道上分别进行,增强亮度shadow_region[shadow_mask] *= enhancement_factors# shadow_region中的像素值限制在0到1之间# np.clip函数:如果元素值小于指定的最小值,那么该元素将被设为最小值;# 如果元素值大于指定的最大值,那么该元素将被设为最大值;# 如果元素值在指定的范围内,那么该元素值保持不变。shadow_region = np.clip(shadow_region, 0, 1)# 将HSV图像转换回RGBfinal_img = (hsv2rgb(shadow_region) * 255).astype(np.uint8)# 显示和保存结果cv2.imshow('Original', img)cv2.imshow('Shadow Removed', final_img)cv2.imwrite('shadow_removed.jpg', final_img)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':detect_and_remove_shadow('Test.jpg')pass
② 效果图
五 结论
从结果图上看,阴影去除效果相当一般,之后尝试下其他的简易方法吧。
至此,本文的内容就结束啦。