Есть ли способ преобразовать изображение в градациях серого в изображение RGB без изменения изображения? - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь обучить модель resnet50 с использованием данных EMNIST, которые представляют собой набор данных, содержащий 300 000 изображений букв и цифр. Resnet50 требует 3-мерных изображений в качестве входных данных, а не оттенков серого, поэтому я попытался преобразовать все изображения в оттенках серого в RGB, но он не работает так, как я хочу. Когда я просматриваю их с помощью pyplot.imshow, изображение RGB действительно отличается от изображения в градациях серого, которое является странным, потому что эти команды фактически просто копируют, вставляя одну и ту же матрицу градаций серого в 3 измерениях.

3 команды, которые я пробовал, приведены ниже:

> resizedImageRGB = cv2.cvtColor(resizedImage,cv2.COLOR_GRAY2RGB)
> resizedImageRGB = np.repeat(resizedImage[:,:,np.newaxis],3,-1) arr =
> np.expand_dims(resizedImage, axis=2) resizedImageRGB =
> np.concatenate((arr,arr,arr), axis=2)

Оттенки серого и RGB-изображение одной из букв даны соответственно:

Изображение серой шкалы

RGB-изображение

1 Ответ

0 голосов
/ 20 июня 2019

Переход от градаций серого к приближению RGB математически сложен.Рассмотрим (одну из) формулу (ы) перехода от RGB к значению серого Y:

Y = 0,299R + 0,587G + 0,1144B

Теперь вы можете представитьчто движение в другом направлении и попытка получить значения R, G и B из Y, ну .. требует слишком много информации (1 уравнение 3 неизвестно).Люди на самом деле используют нейронные сети для этого материала ..

Скорее, правильный подход для вас - это сделать наоборот.То есть, если у вас есть доступ только к данным в градациях серого (или 1-канальным данным), вы должны изменить свою сеть так, чтобы она принимала правильные данные.

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

Обычно код, который вы находите в сети, имеет функцию, которая создает для вас эти сети с правильными входными аргументами.

def ResNET(shape=(256,256,3), ...):
    some_code()

тогда вы обычно можете просто передать свой собственный ввод:

net = ResNET(shape=(256,256,1))

Надеюсь, это поможет.

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