R - Не удается правильно отобразить изображение в градациях серого из двоичного файла - PullRequest
0 голосов
/ 22 октября 2018

Я хочу отобразить изображение в градациях серого, сохраненное в виде двоичного файла.Я пробовал изображения и функции RasterImage, но результат выглядит менее качественным, чем у оригинала.Вот пример моего кода:

finfo=file.info("image_file")

toread= file("image_file","rb")

image_data = readBin(toread, integer(), size=1, n = finfo$size, endian="little")

img_m<-matrix(image_data,nrow=480,ncol=640)

image(data_m,axes=FALSE,col=grey(seq(0,1,length=256)))

Результат вышеприведенного кода выглядит следующим образом:

enter image description here

Howerver,Исходное изображение выглядит следующим образом:

enter image description here

Я попробовал то же самое с Python, используя функцию Image.frombytes, и она отображает изображение правильно.Я не смог сделать то же самое с R.

ОБНОВЛЕНИЕ: я установил первые 150 000 пикселей на 0, чтобы посмотреть, будет ли это правильно влиять на отображение, и вместо черных пикселей я получил серые пиксели.Вот изображение:

enter image description here

Кто-нибудь знает правильную функцию для ее правильного отображения, или что отсутствует в моем коде для получения правильного изображения?

Я ценю любое понимание этого вопроса.

1 Ответ

0 голосов
/ 26 октября 2018

Я изменил две основные вещи, чтобы решить эту проблему.Во-первых, использование integer() в качестве параметра what в readBin() приводит к тому, что двоичный файл читается как вектор целых чисел со знаком.Таким образом, полученный вектор содержал отрицательные значения, которые влияли на градации серого.Чтобы решить эту проблему, я использовал raw() в качестве аргумента what, а затем преобразовал вектор в целое число с помощью as.integer().

Второе изменение заключается в том, что я использовал функцию rasterImage() вместо image() функция для отображения изображения, поскольку первая функция выводит изображение с более высокой контрастностью, чем оригинал.

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