Python: манипулирование 16-битным изображением .tiff в PIL и/или pygame: как-то преобразовать в 8-битное?

введите здесь описание изображенияВсем привет!

Я работаю над программой, которая определяет средний размер колонии дрожжей по фотографии, и она отлично работает с изображениями .bmp, на которых я ее тестировал. Программа использует pygame и позже может использовать PIL.

Однако комбинация камеры и программного обеспечения, которую мы используем в моей лаборатории, сохранит только 16-битные tiff в оттенках серого, а pygame, похоже, не может распознавать 16-битные tiff, только 8-битные. Последние несколько часов я читал о простых способах обойти это, но даже библиотека изображений Python, похоже, не может работать с 16-битными .tiff, я пробовал и получаю «IOError: не удается идентифицировать изображение файл".

import Image

img = Image.open("01 WT mm.tif")

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

Кто-нибудь знает простое решение этой проблемы с использованием бесплатного программного обеспечения или чистого python? Я не слишком много знаю об изображениях: манипуляции с битовой глубиной выходят за рамки моей компетенции. Но я совершенно уверен, что мне не нужны все 16 бит, и что, вероятно, только около 8 действительно имеют реальные данные. Фактически, я однажды использовал ImageMagick, чтобы попытаться преобразовать их, и это привело к полностью белому изображению: с тех пор я прочитал, что должен использовать команду «-auto-levels», потому что данные на самом деле не охватывают 16- битовый диапазон.

Я очень ценю вашу помощь и прошу прощения за незнание.

P.S.: Есть ли у кого-нибудь советы о том, как упростить установку моей программы на Python для непрограммистов? Есть ли способ, например, как-то связать его с Python и pygame, чтобы это была только одна установка? Можно ли это сделать как для Windows, так и для Mac? Спасибо.

РЕДАКТИРОВАТЬ: я попытался открыть его в GIMP и получил 3 ошибки:

1) Неверный счет для поля "DateTime" (27, ожидаемое 20); тег обрезан 2) Извините, не могу обрабатывать изображения с 12-битными образцами 3) Неподдерживаемый макет, нет загрузчика RGBA

Что это значит и как мне это приспособить?


person Ain Britain    schedule 24.04.2011    source источник
comment
Какую версию PIL вы используете? PIL должен поддерживать 16-битные изображения в градациях серого (начиная с версии 1.1.4).   -  person Gabe    schedule 24.04.2011
comment
Лично я бы посмотрел на SciPy с scipy.misc.imread() и функциями помеченного массива, которые кажутся идеальными для того, что вы делаете.   -  person Benjamin    schedule 24.04.2011
comment
Я использую PIL версии 1.1.7, так что может дело не в разрядности? Я в тупике! Есть ли какое-то другое странное форматирование, которое программное обеспечение камеры может делать с .tiff?   -  person Ain Britain    schedule 25.04.2011
comment
На связанную, но отдельную заметку вы можете взглянуть на CellProfiler. Он имеет пример конвейера для подсчета колоний и работает с 16-битными изображениями в нескольких форматах.   -  person    schedule 26.04.2011
comment
Извините, глупый вопрос: могу ли я загрузить свой образец изображения на этот сайт? Кажется, что stackoverflow преобразовал его в png.   -  person Ain Britain    schedule 26.04.2011
comment
Таким образом, мы можем сделать вывод, что ваши изображения имеют проблемы. 1) Найдите руководство или документацию к камере. У научного оборудования обычно есть один с подробными характеристиками. 2) Определите генерируемый результат и, если есть какие-либо варианты, ИЛИ 3) попробуйте другие инструменты Photoshop, Imagemagick и т. д. Вот почему научные исследования сложны - эксперимент может быть легким, а анализ данных - мучением. На этом этапе вы должны принять ответ вас и задать новый вопрос конкретно о вашем формате изображения. Это больше не вопрос о питоне.   -  person WombatPM    schedule 28.04.2011


Ответы (3)


py2exe — это способ упаковки вашего приложения, если вы работаете в системе Windows.

Что касается проблемы с 16-битным TIFF:

Этот пример http://ubuntuforums.org/showthread.php?t=1483265 показывает, как для преобразования для отображения с помощью PIL.

Теперь о незаданной части вопроса: при анализе изображения вы хотите поддерживать максимально возможный динамический диапазон в ваших манипуляциях с изображением как можно дольше - таким образом вы теряете меньше информации. Как вы можете знать или не знать, PIL предоставляет вам множество фильтров/преобразований, которые позволят вам повысить контрастность изображения, выровнять уровни освещенности или выполнить обнаружение краев. Будущее направление, которое вы, возможно, захотите рассмотреть, — это отображение исходного изображения (конечно, масштабированного до 8 бит) рядом с масштабированным изображением, которое было обработано для обнаружения краев.

Просмотрите http://code.google.com/p/pyimp/wiki/screenshots еще несколько примеров и пример кода.

person WombatPM    schedule 24.04.2011
comment
Я даже не могу Image.open() эти tiff'ы, это дает мне IOError: не удается идентифицировать файл изображения, поэтому пример в первой ссылке не будет работать. Я знаю, что файлы в порядке, потому что они открываются в Photoshop. Может ли это быть чем-то другим, кроме битовой глубины? - person Ain Britain; 25.04.2011
comment
Если открыть в фотошопе и пересохранить в tiff, то работает? Это может быть проблема с заголовком файла или необработанные данные по сравнению со сжатыми. - person WombatPM; 25.04.2011
comment
Я могу открыть их и преобразовать в Photoshop; Я тестировал свой код с .bmp, который я сделал. Судя по щелчку правой кнопкой мыши и просмотру Свойства, в оригиналах сжатия нет. Я не знаю, что такое заголовок файла или как его посмотреть, как я могу увидеть, что что-то не так? - person Ain Britain; 26.04.2011
comment
Но вы меняете форматы. Если вы откроете одно из изображений и сохраните его с новым именем, но сохраните тип файла как TIFF и данные как 16-битные, что произойдет. Photoshop автоматически исправит вещи в фоновом режиме, а когда вы сделаете «Сохранить как», исправите любые проблемы с заголовком. Я хочу попытаться определить, работает ли известный хороший файл TIFF. Если это так, вы можете добавить подпрограмму (ImageMagick можно вызвать из Python) или выяснить, что не так с этими файлами (возможно, они не совсем TIFF), но сначала вам нужно изолировать проблему. - person WombatPM; 26.04.2011
comment
@cgohlke @WombatPM Я попытался открыть его в GIMP и получил 3 ошибки: 1) Неверный счет для поля DateTime (27, ожидалось 20); тег обрезан 2) Извините, я не могу обрабатывать изображения с 12-битными образцами 3) Неподдерживаемый макет, нет загрузчика RGBA Что это значит и как мне его подогнать? - person Ain Britain; 26.04.2011

Я бы посмотрел на pylibtiff, у которого есть чистый читатель tiff python.

Для объединения лучше всего подходят py2exe и py2app.

person Community    schedule 24.04.2011

На самом деле это вопрос из 2 частей:

1) Изменение данных 16-битного изображения для Python — я обычно использую GDAL + Numpy. Это может быть слишком много для ваших требований, вместо этого вы можете использовать PIL + Numpy.

2) Выпуск инженерных приложений Python может запутаться. В зависимости от того, насколько сложно ваше приложение, вы можете обойтись py2deb, py2app и py2exe. Изучение distutils тоже поможет.

person whatnick    schedule 24.04.2011