Использование локального среднего цвета изображения для уменьшения разницы в молнии - PullRequest
0 голосов
/ 21 ноября 2018

Я новичок в opencv, и в настоящее время я работаю над «Обнаружением диабетической ретинопатии» (конкурс был запущен 3 года назад; подробности здесь: 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 пока дает лучшие результаты, но ничто по сравнению с изображениями выше. Я получил некоторые идеи здесь: ( Как удалить локальный средний цвет из изображения с OpenCV ), но не смог воспроизвести результатыЕсли кто-то может подсказать мне, как это можно сделать с помощью opencv или любой другой библиотеки python vision, это было бы здорово. Образцы изображений можно загрузить с сайта 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 голосов
/ 22 ноября 2018

Код, который вы показываете, выполняет локальное выравнивание гистограммы, в то время как выделенный текст, который вы опубликовали, говорит об удалении среднего цвета из каждого пикселя.

Удаление среднего цвета может быть сделано так:

# 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), чтобы найти что-то, что подходит для вашего варианта использования.

Возможно, вам придется уменьшить изображение до общего размера, прежде чем делать это., чтобы получить сопоставимые результаты (как также отмечено в сообщении в блоге, которое вы цитируете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...