眼底图像预处理-图像亮度增强

数据库中大量的眼底图像亮度不均,明暗分布不一致,在预处理过程中,需要进行亮度校正。

在HSV 颜色空间中V分量直接反映亮度信息,因此通过HSV 对亮度进行校正。

用两种方法进行校正,参数value在-1~1之间,value的具体取值,根据源图的亮度均值调整。

1)基于当前的亮度:

value取值 [0,1]之间,亮度乘数alpha = 1/(1-value),即当前值越大,调整后越大。

value取值[-1,0] 之间,亮度乘数alpha = value+1,即亮度降低

2)均衡扩大,

亮度乘数alpha = value, 所有的像素都增加 同样的亮度值

代码如下,

def HSV_adjust(rgb_img, basedOnCurrentValue=True):
    img_mean = cv2.mean(rgb_img)[0]
    img_mean, img_stddv = cv2.meanStdDev(rgb_img)
    print("\n mean:", img_mean, " stddev:",img_stddv)
    # 源图像的的rgb三通道的亮度均值加权平均 r* 4 + g *3 +b *3/ 三通道的亮度均值和
    img_mean_acc = img_mean[0] + img_mean[1] + img_mean[2]
    img_mean_avr = (img_mean[0] *4 + img_mean[1] *3+img_mean[2] *3)/img_mean_acc
    if img_mean_avr > 4:
        value = 0.3
    elif (img_mean_avr >2) and (img_mean_avr < 4):
        value = 0.2
    else:
        value = 0.1

    hsv_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2HSV)
    img = hsv_img * 1.0
    img_out = img

    # 基于当前亮度进行调整(V*alpha)
    if basedOnCurrentValue:
        # 增量大于0,指数调整
        if value >= 0:
            alpha = 1 - value
            alpha = 1 / alpha
        # 增量小于0,线性调整
        else:
            alpha = value + 1
        img_out[:, :, 2] = img[:, :, 2] * alpha

    else:
        alpha = value
        img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha

    # HSV亮度上下限处理(小于0取0,大于1取1)
    img_out = img_out / 255.0
    mask_1 = img_out < 0
    mask_2 = img_out > 1
    img_out = img_out * (1 - mask_1)
    img_out = img_out * (1 - mask_2) + mask_2
    img_out = img_out * 255.0

    # HSV转RGB
    img_out = np.round(img_out).astype(np.uint8)
    img_out = cv2.cvtColor(img_out, cv2.COLOR_HSV2RGB)
    img_out = img_out / 255.0

    cv2.imshow("hsv", img_out)

    return img_out

value 分别在0.1,0.3,0.5 得出三张图如下,

其中第一张图的亮度有些暗,还可以提高些,

第三张 value =0.5 的中间视盘区域有些过亮。

所以 value =0.2 比较好。

眼底图像预处理-图像亮度增强_第1张图片

眼底图像预处理-图像亮度增强_第2张图片

眼底图像预处理-图像亮度增强_第3张图片

下面是17岁boy 想当攻程狮的链接,对HSV 有了较深的了解。

RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解

https://blog.csdn.net/bjbz_cxy/article/details/79701006

你可能感兴趣的:(眼底图像预处理-图像亮度增强)