Цветовой порог изображения HLS jpeg

Я пытаюсь раскрасить изображение в формате jpeg, чтобы сохранить линии дорожек и, надеюсь, избавиться от остального мира. Я читаю изображение с помощью cv2 следующим образом:

test_image = cv2.imread(myimage)
#convert to RGB space from BGR
test_image = cv2.cvtColor(test_image, cv2.COLOR_BGR2RGB)

Затем я конвертирую test_image в цветовое пространство HLS, чтобы сохранить канал l, как показано ниже:

def get_l_channel_hls(img):
    # Convert to HLS color space and separate the l channel
    hls = cv2.cvtColor(img, cv2.COLOR_RGB2HLS).astype(np.float)
    l_channel = hls[:,:,1]
    return l_channel

Затем я применяю некоторые пороги к этому каналу l и заменяю значения пикселей на 0 или 1, чтобы сохранить только те пиксели, которые мне нужны. (позже я умножу эти значения на 255, чтобы оставшиеся пиксели выглядели белыми)

def get_color_channel_thresholded_binary(channel, thresh=(0,255):
    # Threshold color channel
    print("min color threshold: {}".format(thresh[0]))
    print("max color threshold: {}".format(thresh[1])) 
    binary = np.zeros_like(channel)
    binary[(channel > thresh[0]) | (channel <= thresh[1])] = 1
    return binary

Затем я беру эту бинарную карту и заменяю оставшиеся пиксели на 255.

def get_overall_combined_binary(binary1):
    grayscaled_binary = np.zeros_like(binary1)
    grayscaled_binary [(binary1 == 1)] = 255
    return grayscaled_binary

И я отображаю этот двоичный файл с помощью pyplot matplotlib, как показано ниже:

import matplotlib.pyplot as plt
#grayscaled_binary = # get the grayscaled binary using above APIs
imshow(grayscaled_binary, cmap='gray')

То, что я здесь наблюдаю, довольно странно. Изображение выглядит полностью черным для ЛЮБЫХ значений, для которых thresh[1] < thresh[0]. т. е. максимальный порог МЕНЬШЕ минимального порога. И я понятия не имею, почему это происходит.

Я просмотрел код несколько раз и не вижу в нем ошибок. Единственная разница между кодом, который я вставил сюда, и тем, который я использую, заключается в том, что я использую виджеты IPython в блокноте Jupyter для взаимодействия.

Я был бы очень признателен за любую помощь или понимание этой темы. Я также прилагаю два примера того, о чем я говорю. Заранее спасибо. .jpg" alt="Сценарий отказа"> введите здесь описание изображения


person sdevikar    schedule 20.03.2017    source источник


Ответы (1)


Линия

binary[(channel > thresh[0]) | (channel <= thresh[1])] = 1

устанавливает все пиксели в 1, если thresh[0] < thresh[1]. Я полагаю, это не то, что вы хотите.

Не совсем понятно, чего вы на самом деле хотите вместо этого. Предполагая, что те пиксели, которые находятся в пределах двух пороговых значений, должны быть белыми, вместо этого вы должны использовать логический and.

binary[(channel > thresh[0]) & (channel <= thresh[1])] = 1

person ImportanceOfBeingErnest    schedule 20.03.2017
comment
Большое спасибо! Одна ошибка копирования и вставки стоила мне полдня. И мне было интересно, почему это работало раньше. - person sdevikar; 20.03.2017