Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 12, 2011 15:58:53

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

Всем доброго времени суток!
На входе имеется 16 битный двумерный массив. Необходимо получить из него изображение,желательно в градации серого. Подскажите, как лучше это реализовать? Попытался сделать через PIL, но что-то странное творится с цветами и яркостью. Не совсем понятно, как работает функция frombuffer, в документации PIL очень мало про неё написано, семантика совсем не разбирается. Очень прошу, подскажите кто что знает.

import numpy
from numpy import indices
from PIL import Image
w = 512
h = 512
i, j = indices()
image = numpy.array()
image.shape=h,w
print image
pilImage = Image.frombuffer('RGBA',(w,h),image)
pilImage.show('my.png')



Офлайн

#2 Янв. 13, 2011 06:14:45

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Изображение из массива.

У вас 16 битный массив, а вы создаете RGBA изображение, для которого, насколько я знаю, нужно 32 бита. Что числа в массиве? Значения в градации серого?



Офлайн

#3 Янв. 13, 2011 11:09:40

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

На входе 16 бит RGB. На выходе необходимо получить 8 бит градацию серого. Нужно применить преобразование R = G = B = I/256 (I - исходная интенсивность от 0 до 65535). Когда я применяю RGBA, яркость изменяется правильно - от 0(черный) до 255(самый яркий). Не понятно каким образом формируется цвет выходного изображения. Например в данном случае получаю 2 красных градиентных полосы. Почему именно красные?:

[


…,


]



Офлайн

#4 Янв. 13, 2011 11:21:24

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Изображение из массива.

Попробуйте формат изображения ‘L’ а не ‘RGBA’



Офлайн

#5 Янв. 13, 2011 11:33:13

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Изображение из массива.

Посмотрите на

import numpy
from numpy import indices
from PIL import Image

w = h = 256
iindices([h,w])
image = numpy.array(i, numpy.uint8)

print image

pilImage = Image.frombuffer('L',(w,h),image)
pilImage.show('my.png')
и определитесь, какие данные в image вам нужны



Офлайн

#6 Янв. 13, 2011 11:54:22

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

image - это тестовый 16 битный массив, то есть в будущем будет поступать определенный 16 битный массив, который необходимо преобразовать в градацию серого 8 бит, выбрав определенный диапазон - то есть 255(Imin-Imax) из всего 65535(I). И соответственно, чтобы было возможно менять значения Imin - Imax на всем I.



Офлайн

#7 Янв. 13, 2011 12:07:20

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Изображение из массива.

вот и отмасштабируйте ваш “определенный массив” в “определенный диапазон” так, чтобы все значения помещались в один байт - и наступит счастье.
Масштабировать нужно средствами того же numpy



Офлайн

#8 Янв. 13, 2011 12:21:37

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

Спасибо. А можно ли средствами numpy вырезать кусок из 16 бит массива? Потому что, как я понимаю, уберет детали, которые могут быть важны. Например I = 1024, и I = 1100, и I = 1200 отобразятся в одно и то же значение RGB.
Не могли бы вы привести пример, как можно создать 16 битный массив, чтобы в режиме RGBA получилось разноцветное изображение. У меня выходит только один цвет.



Офлайн

#9 Янв. 13, 2011 12:34:05

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Изображение из массива.

Не понимаю вопросов. Преобразовывайте числа как хотите - лишь бы в итоге поместится в байтовый диапазон.

Зачем вам разноцветное изображение, да еще и в RGBA? В начале речь шла о градациях серого.



Офлайн

#10 Янв. 13, 2011 12:41:11

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

Просто не понимаю, как в массиве определяются цвета, почему вот этот отображается красным цветом? Меняется только яркость.
[


…,


]



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version