Как инвертировать и нормализовать изображение PIL с помощью функции 'point-lambda' - PullRequest
0 голосов
/ 19 сентября 2018

Я пытался использовать функцию point для инвертирования и нормализации PIL image к 1;но я не получаю желаемых результатов!Я попробовал вот что (не знаю, что не так?)

data = data.point(lambda p: 1 if p < 127  else 0 ) # threshold, invert and normalize to 1

Например, при попытке

print(np.array(data).max())

печатать True.

Однако преобразование массива PIL Image в numpy с последующим инвертированием его работало следующим образом:

data = np.array(data.getdata(),
                np.uint8).reshape(data.size[1], data.size[0], 1)        
        maxG = data.max() # correcting the values of folder e, they do not match the other folders
        data = ( (maxG - data)/maxG ).astype('uint8') 
        tsfm = transforms.ToPILImage() #import torchvision.transforms as transforms
        data = tsfm(data)   

Я пробовал оба метода в эксперименте по распознаванию слов, у меня работал только второй.К сожалению, использование функции point привело к неверным результатам.Не уверен, в чем разница?

NB.Второй метод очень медленный, поэтому, если это преобразование можно выполнить с помощью функции point, это очень поможет.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы путаете "нормализация" и "порог" .

С "порогом" вы делаете все значения выше или равнымидо порога, равного некоторому большому числу, и все значения ниже порога, равного некоторому низкому числу.Единственный возможный результат для каждого пикселя - либо большое число, либо меньшее число - ничего между ними.На типичном 8-битном изображении порог равен 127, и все пиксели будут иметь значение 0 или 255.

При «нормализации» вы ограничите все значения в изображениимежду новым верхним пределом и новым нижним пределом - или любым значением между .Таким образом, в результате получается множество новых пикселей, которые больше нижнего предела и ниже верхнего предела, но равномерно интерполируются между ними.На типичном изображении вы можете нормализовать все значения в диапазоне 0-255, и каждый пиксель может получить любое значение в этом диапазоне.

...