使用图像的局部平均色彩来减少闪电差异

时间:2018-11-21 17:52:01

标签: python opencv computer-vision

我是opencv的新手,目前正在从事“糖尿病性视网膜病变检测”(三年前发起了kaggle竞赛;更多详细信息,请点击https://www.kaggle.com/c/diabetic-retinopathy-detection/data)。目前,我正在尝试在图像处理上实现类似以下结果所示的结果(来源:http://blog.kaggle.com/2015/09/09/diabetic-retinopathy-winners-interview-1st-place-ben-graham/): enter image description here

现在,我尝试了不同的方法,包括直方图均衡和对比度受限的自适应直方图均衡(CLAHE)。到目前为止,CLAHE给出了最佳结果,但是与上图相比没有任何结果。我从这里得到了一些想法:(How to remove the local average color from an image with OpenCV),但是无法重现结果。如果有人可以指导我如何使用opencv或任何其他python视觉库来完成,那就太好了。样本图像可以从kaggle网站下载(上述链接)。谢谢。

到目前为止,这是我的代码:

def equalize_hist(input_path):
    img = cv.imread(input_path)
    for c in range(0, 2):
        img[:,:,c] = cv.equalizeHist(img[:,:,c])

    cv.imshow('Histogram equalized', img)
    cv.waitKey(0)
    cv.destroyAllWindows()

def clahe_rgb(input_path):
    bgr = cv.imread(input_path)
    lab = cv.cvtColor(bgr, cv.COLOR_BGR2LAB)
    lab_planes = cv.split(lab)
    gridsize = 5
    clahe = cv.createCLAHE(clipLimit=2.0,tileGridSize=(gridsize,gridsize))
    lab_planes[0] = clahe.apply(lab_planes[0])
    lab = cv.merge(lab_planes)
    bgr2 = cv.cvtColor(lab, cv.COLOR_LAB2BGR)
    cv.imshow('CLAHE RGB', bgr2)
    cv.waitKey(0)
    cv.destroyAllWindows()


def clahe_greyscale(input_path):
    img = cv.imread(input_path)
    gray_image = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
    cl1 = clahe.apply(gray_image)    
    cv.imshow('CLAHE Grayscale', cl1)
    cv.waitKey(0)
    cv.destroyAllWindows()

1 个答案:

答案 0 :(得分:2)

您显示的代码正在执行局部直方图均衡化,而您发布的突出显示的文本则是关于删除每个像素的平均颜色。

可以通过以下方法去除平均颜色:

# Blur the image
blurred = cv2.blur(img, ksize=(15, 15))

# Take the difference with the original image
# Weight with a factor of 4x to increase contrast
dst = cv2.addWeighted(img, 4, blurred, -4, 128)

您可以调整模糊代码的内核大小(大于15)以找到适合您的用例的东西。

在执行此操作之前,您可能需要将图像缩小到一个普通的尺寸,以获得可比的结果(如您引用的博客文章中所述)。