基于LAB 颜色空间的图像阴影检测与去除方法
期刊名称:《基于LAB 颜色空间的图像阴影检测与去除方法》
期刊作者:梁永侦,潘斌,郭小明,梁媛
毕业院校:辽宁石油化工大学计算机与通信工程学院
论文内容概要
- 介绍阴影分类中自阴影与投射阴影的相关概念与情况原理
- 分析基于LAB颜色空间的图像阴影检测与去除方法和相关理论
- 介绍一种均值偏移算法来对图像进行色彩分割算法方法
- 介绍实验测试结果与比对分析结果并对整体算法进行总述
阴影分类
- 物体在没有强光直射的情况下,只有普通自然光照射而产生的自投影,称为自阴影
- 物体在强光直射的情况下,背光一侧物体所投射的阴影较暗,且亮度远低于周围区域,称为投射阴影
方法原理
- LAB 颜色空间
- LAB 颜色空间是指“颜色-对立”空间,表示彩色空间有3 个通道,其中L 表示亮度,A 和B 为颜色相异的另外2 个通道
- L 通道取值范围是( 0,100) ,对应于从黑色到白色的不同阴影。A 通道取值范围是( -128, 127) ,表示绿色与红色的比率。B通道取值范围也是( -128,127) ,表示蓝色与黄色的比率
- 阴影检测
- 场景图像中阴影区域的亮度远比周围环境亮度小,显示亮度较为阴暗,又因为L 通道表示的是 图像亮度信息,所以该阴影区域很容易就定位在L 通道中
- 流程:
- 将单幅RGB 图像转换为等效的LAB 图像。
- 分别计算图像中L、A 和B在图像平面上颜色像素的平均值。
- 图像中存在较低值的L和B像素区域时,可将该像素分类为阴影区域像素,而其他像素为非阴影区域像素。
@staticmethod
def remove_shadows(org_image,
lab_adjustment=False,
region_adjustment_kernel_size=10,
shadow_dilation_iteration=5,
shadow_dilation_kernel_size=3,
verbose=False):
# If the image is in BGRA color space, convert it to BGR
if org_image.shape[2] == 4:
org_image = cv.cvtColor(org_image, cv.COLOR_BGRA2BGR)
converted_img = cv.cvtColor(org_image, cv.COLOR_BGR2LAB)
# Used for constructing corrected image
shadow_clear_img = np.copy(org_image)
# Calculate the mean values of A and B across all pixels
means = [np.mean(converted_img[:, :, i]) for i in range(3)]
thresholds = [means[i] - (np.std(converted_img[:, :, i]) / 3) for i in range(3)]
# If mean is below 256 (which is I think the max value for a channel)
# Apply threshold using only L
if sum(means[1:]) <= 256:
mask = cv.inRange(converted_img, (0, 0, 0), (thresholds[0], 256, 256))
else: # Else, also consider B channel
mask = cv.inRange(converted_img, (0, 0, 0),
(thresholds[0], 256, thresholds[2]))
kernel_size = (region_adjustment_kernel_size, region_adjustment_kernel_size)
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, kernel_size)
cv.morphologyEx(mask, cv.MORPH_CLOSE, kernel, mask)
cv.morphologyEx(mask, cv.MORPH_OPEN, kernel, mask)
# We need connected components
# Initialize the labels of the blobs in our binary image
labels = measure.label(mask)
阴影去除
- 色彩分割和色度匹配
- 基于LAB 颜色空间,将颜色空间中的a* 和b* 定义为色度属性。根据均值偏移算法原理,通过对图像不同的颜色值分析,逐步将图像色彩进行分割处理。
- 重新整合
- 通过分析和计算求取平均值,将阴影区域不同区段的色度值乘以适当的常数,使得各阴影区段与非阴影区段的平均色度值相匹配。
- 色度校正
- 将去阴影区段分布不均的色度值重新乘以或除以适当的常数,以进一步缩小非阴影区域与去阴 影区域的色度差,从而达到校正整幅图像平均色度值相匹配的目的
- 边缘校正
- 采用一种非线性平滑技术的中值滤波法来对图像进行边缘校正,以减少阴影区域与非阴影区域边界中的误差。
实验效果
- 原图
- 处理图