воскресенье, 14 июня 2009 г.

ImageJ - одна из лучших программ для обработки изображений

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

Сразу скажу - это программа не для создания новых изображений, не для компьютерных художников, она для обработки, улучшения, редактирования и т.п. уже имеющихся изображений. Для извлечения из них полезной информации. Поэтому данная программа так популярна у тех, кто обрабатывает изображения полученные с микро- или телескопа и хочет из картинки получить набор цифр и иной информации характеризующей объект или являение, а также улучшить эту картинку, что бы выделить на ней необходимые объекты или ньюансы или просто для того, что бы она была приятна для глаза. Хотя в ImageJ и присутствуют некоторые функции для рисования, они довольно примитивны, и те кто хочет создать в ImageJ картинку "с чистого листа" будут разочарованы.


К числу базовых возможностей программы можно отнести:

Мультиплатформенность:
Так как ImageJ написана на Java, то ее можно запустить на Linux, Windows (32-bit или 64-bit), Mac OS X . Лично я пользуюсь ей в первых двух ОС. Под Windows ее работа лично мне нравится больше.

Открытая программ:
ImageJ и ее исходный Java код свободно доступны. Ни каких лицензионных ограничений.

Сообщество пользователей:
ImageJ поддерживается огромным сообществом пользователей во всем мире, которые помогут решить любой вопрос. Более 1700 пользователей и разработчиков подписаны в ImageJ mailing list. И я один из них.

Мкросы:
Для автоматизации часто повторяемых одинаковых операций можно использовать легко записываемые макросы. Что бы сгенерировать код макроса необходимо только воспользоваться command recorder, при необходимости затем его можно подправить и оттестировать в macro debugger. Более трех сотен готовых макросов доступно на официальном сайте программы.

Плагины:
Плагины позволяют еще больше повысить функциональность ImageJ, благо программа снабжена собственным текстовым редактором для редактирования исходного текста (впрочем самого что ни на есть примитивного, а как это исправить я расскажу чуть позже) макроса и Java компилятором. Более пятисот уже готовых плагинов доступно на официацльном сайте программы и на некоторых других специализированных сайтах. Плагины позволяют получать доступ к графическим (и видео) файлам самых экзотических форматов, выполнять морфологические операции, свертку, обработку различными фильтрами, вейвлет обработку, преобразовывать в различные форматы, работать с 3-, 4- и т.д. D. Лично я разрабатываю плагины для автоматизированного распознования, идентификации, локализации, сегментации и выделения объектов заданного класса на изображении, что придает ImageJ функционал машинного зрения.

Инструмент разработчика:
Библиотека ImageJ позволяет не только расширять функциональность программы за счет написания плагинов, но на ее основе можно разрабатывать апплеты, сервлеты или самостоятельные приложения. Лично я опробовал довольно много библиотек для обработки изображений. Так вот эта по моему мнению отличается идельнейшим сочетанием функциональной мощи, скорости, легкости и доступности освоения, интегрируемости с другими библиотеками. Из-за ее я выучил Java, хотя до этого относился к ней с большим предубеждением и никак не могу слезть с этого

Скорость:
ImageJ опровергнет представления многих о неповоротливости програм на Java. Немногие библиотеки на C++ позволяют обрабатывать изображения с такой эффективностью. По заявлению на официальном сайте она способна отфильтровать изображение размером 2048x2048 за 0.1 seconds - 40 миллионов пикселов за секунду!

Типы данных:
8-bit grayscale или индексированный цвет, 16-bit unsigned integer, 32-bit floating-point и RGB цвет.

Форматы файлов:
Форматом по умолчанию для данной программы является TIFF (без сжатия). В ее базовый функционал заложены возможности открытия и сохранения файлов в форматах GIF, JPEG, BMP, PNG, PGM, FITS иASCII. Open DICOM. Поддержка открытия и сохранения во множестве других форматов поддерживается посредством специальных плагинов.

Окно изображения:
Каждое изображение открывается в собственном окне (что для многих может показаться сначала непривычным, но к этому быстро привыкаешь и не можешь представить себе другого) с возможностью изменения масштаба от 1:32 до 32:1. Если изображение не помещается полностью в окне доступна функция скролинга. Все функции анализа рабоатют с изображениями представленными в любом масштабе.

Выделение:
Радует разнообразие способов выделения участков изображения: прямоугольное, элипс, полигон или "свободное" выделение, "волшебная палочка", выделение линии и точки. Область выделения можно в последующем редактировать, инвертировать, сохранять и применять к любому другому изображению (иногда это ой как надо). В области выделения можно проделывать любые операции по анализу изображения, заливке и очистке, фильтрации и практически любой другой функции, доступной для всего изображения.

Улучшение изображение:
В базовой версии поддерживается размытие, повышение резкости, обнаружение границ, медианный и другие линейные и нелинейные фильтры, пороговый фильтр, как для 8-bit, так и для цветных RGB изображений. Интерактивная и автоматическая подстройка яркости и контраста. Возможность разделения цветного изображения на каналы, обработка каждого канала в отдельности и сборка обработанного цветного изображения.

Геометрические операции:
Масштабирование, кадрирование, произвольное вращение, зеркальное отображение (вертикальное и горизонтальное).

Анализ:
Измерение площади, средней яркости участка или целого изображения, стандартного отклонения, минимума и максимума. Измерения длинн и углов с автоматическим переводом из пикселей в реальные единицы измерения - миллиметры или микроны, к примеру. Калибровка с использованием стандартных образцвов плотности. Гистограмы и проифили изображений.

Редактирование:
Копирование/вырезание/вставка выделенной части или всего изображения. Вставка с использованием операторов AND, OR, XOR или режима "Blend". Добавление текста, стрелок, прмоугольных, овальных и полигональных элементов, а также целых изображений. В свое время я был поражен богатством матемактических операций, которые можно без всяких усилий произвести с изображениями. К примеру, какая еще программа позволит отнять от одного изображения другое, полученное путем извлечения корня квадратного из исходного за несколько кликов мышкой (а если зашить это в макрос, то с помощью шорт-кута)?

Работа с цветом:
Разделение 32-битного цветного изображения на RGB или HSV каналы. Объединение 8-битных каналов в цветное изображение. Конвертирование между различными типами данных, перевод RGB изображения в 8-битное индексированное. Применение псевдо-цветных палитр (LUT) к полутоновым чернобелым изображениям.

Стеки:
Стек можно представить как стопку изображений, имеющих одинаковый размер и формат, расположенных в одном окне. В виде стека в ImageJ можно открыть .avi видео, при этом каждый кадр будет представлен в виде отдельной картинке в стеке. Затем со стеком можно осуществить самые разные операции, которые только доступны для отдельного изображения, в том числе и с использованием выделения, при этом выделить можно один и тот же участок на всех изображениях стека, а для выполнения операции достаточно один раз вызвать необходимую команду. Данный режим удобен для представления информации с размерностью большей, чем 2D. Также можно анализировать временную динамику развития некоторого события. Кроме .avi файла в стек можно автоматически поместить все изображения из отдельной папки, или допустим каждое 5-е изображение, начиная с 10-го и заканчивая 125-м. Стек в свою очередь можно сохранить как многослойный TIFF файл, или как видео, можно его и разделить на отдельные изображения. Чего не хватало несколько раз в стеке, так это изменение прозрачности отдельных изображений, таким образом, что бы были видны изображения расположенные "ниже", но, вероятно, это инстинкт, доставшийся от Photoshop-а. В итоге, все те операции для которых мне была нужна прозрачность я научился выполнять штатными средствами ImageJ - калькулятором изображений, получение цветного изображение из отдельных каналов или сохранение выделения на одном изображении и перенос его на другое.
С первого раза ImageJ пугает и запутывает, но разобравшись в нем и поняв его философию мы получаем мощнейший инструмент для обработки изображений и извлечения из них необходимой информации. Установив же необходимые плагины, а тем более научившись писать их самостоятельно, мы обретаем практически неограниченные возможности.