Продвинутые средства анализа изображений в nip2

Некоторое время назад я уже писал об этом замечательном графическом редакторе nip2 для огромных изображений - сейчас я хочу записать методы обработки изображений в нём. По роду текущей деятельности приходится иметь дело с 12-битными изображениями (конвертированные RAW-файлы при помощи dcraw в полностью документальный режим), так что просматривать и работать с такими картинками в обычных редакторах (типа GiMP или Krita) не удобно. Зато в nip2 можно и просматривать изображения любой битности, и выполнять весьма изощрённые методы обработки. Об этом ниже и будет говориться.


Несколько слов об интерфейсе
Способ взаимодействия с пользователем у nip2 весьма оригинален, и к нему требуется привыкнуть. Это своеобразная таблица, каждая следующая ячейка которой - результат операции с предыдущей. И так далее: таким образом, конечный результат зависит от результатов обработки на предыдущих шагах, и при изменении любого шага автоматически пересчитывается.
Это одна из изюминок nip2. Например, вы создали некую последовательность фильтров, откадрировали и хотите быстро посмотреть фурье-спектр, но для другого изображения вместо загруженного сейчас. Легко и просто: щёлкаем правой кнопкой мыши по ячейке с исходным изображением (как правило, левое верхнее), и выбираем "Replace from file".
После этого результаты всей цепочки фильтров и преобразований быстро пересчитаются для нового изображения. Это бывает очень полезно при анализе результатов экспериментов.

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


Изменение масштаба яркости при просмотре
Очень полезная функция для просмотра изображений.

Для того, чтобы изменить масштаб значений для отображения, следует дважды щёлкнуть по миниатюре и перетащить ползунки масштаба для лучшего масштабирования. Это не изменяет само изображение, а лишь масштабирует его для просмотра. Закрываем окно, в котором меняли масштаб просмотра, что сохраняет настройки для текущего рабочего окружения.


Быстрое масштабирование
Для того, чтобы изменить масштаб, совсем не обязательно искать на панели инструментов какую-то кнопку: достаточно, удерживая клавишу CTRL на клавиатуре, покрутить колёсиком мыши - и изображение в окне будет менять свой масштаб. Естественно, на оригинальном файле это не отразится.


Быстрое выделение области
Если нужно быстро выделить область интереса на изображении, достаточно зажать клавишу CTRL на клавиатуре и начать выделять мышью нужную область. Тут же будет создана новая область с названием, соответствующем текущему ряду и последнему свободному номеру ячейки (например, если ряд B и ячейка 14 последняя - новая будет называться B15).


Быстрое перемещение по изображению
Колёса продолжают рулить! Колесом мыши можно скроллить изображение вверх-вниз, а если зажать SHIFT и использовать колесо мыши - скроллинг будет в направлениях "влево-вправо". Очень удобно перемещаться так без использования полос прокрутки.


Горячие клавиши в nip2
Если вы часто используете какую-то функцию, есть смысл поставить на неё горячую клавишу. Для этого открываем меню, доходим до нужной нам функции кнопками клавиатуры, подсвечиваем её (или нажимаем её кнопкой мыши и держим для подсветки) и наживаем к примеру сочетание клавиш CTRL+M - и теперь эту функцию можно вызвать по нажатию CTRL+M.



Анализ изображений в nip2

С помощью nip2 можно проводить довольно сложный анализ изображений: Фурье-анализ, корреляционный анализ, свёртка, low-pass/high-pass фильтры и прочее.

Фурье-анализ в nip2
Часто бывает необходимо видеть Фурье-спектр изображения, особенно тогда, когда к нему применяются методы обработки. Для этого идём в Toolkits - Math - Fourier - Forward для прямого фурье-преобразования. Считается оно в первый раз довольно долго, зато потом будет пересчитываться быстро.

Там же, в nip2, можно выполнить и обратное фурье-преобразование. Для этого идём в Toolkits - Math - Fourier - Reverse и получаем назад своё изображение.

Гистограмма изображения в nip2
Гистограмма это зависимость количества пикселей одного уровня яркости от яркости изображения - она даёт представление о том, пикселей какой яркости на изображении больше или меньше. Функция чрезвычайно полезная при анализе изображений, и, разумеется, она присутствует в nip2. Для этого выделяем изображение, которое собираемся анализировать, и идём в меню Toolkits - Histogram - Find - One Dimension.
В результате, как на скриншоте выше, имеем красивую и информативную гистограмму изображения.



Изменение изображений в nip2
Некоторые привычные операции, такие как кадрирование, в nip2 есть, просто они могут выглядеть, согласно философии nip2, несколько непривычно...

Кадрирование
Есть и эта операция, причём её можно делать и визуально, и имея точные координаты.
Точное кадрирование можно осуществить, либо когда вам известны координаты области, либо используя nip2 в поточном режиме (для этого следует использовать команду vips и мануал к ней). Отмечаем ячейку с изображением, которое необходимо кадрировать, и идём в Toolkits - Image - Crop. После этого появится ещё одна ячейка ниже, и
потребуется указать координаты среза.

Визуальное кадрирование можно применить к изображению, открыв изображение на просмотр в окне, идём в меню File - New - New Region. Теперь меняем размер области и её положение по вкусу.
А можно сделать и ещё проще: для кадрирования в nip2 достаточно, зажав клавишу CTRL, выделить желаемую область на изображении - и в следующей ячейке сразу же появится желаемая область выделения.


Порог
Казалось бы, простая вещь - есть в любом уважающем себя графическом редакторе. В nip2 это тоже есть, но не так очевидно. Мне пришлось некоторое время поломать голову и проявить немного сообразительности: порог, как выясняется, можно сделать в два этапа. В nip2 есть простые статистические операции: среднее, минимум, максимум и прочее. Выделяем изображение и находим, например, среднее (Toolkits - Math - Statistics - Mean). В следующей ячейке появится число:
Теперь выделяем, зажав Shift, сначала ячейку с числом, а потом ячейку с картинкой. После чего идём в математику (Toolkits - Math) и ищем Relational (Соотношения). Выбираем Less than - это ли не порог? Отлично, в следующей ячейке появится чёрно-белое изображение с порогом. На скриншоте выделено полупрозрачным.
Обновлено: оказывается, всё проще - в nip2 недавно появилась специальная функция порога, которая упрятана в меню Toolkits - Image - Select - Threshold.

Склеивание изображений в nip2.
Чтобы склеить несколько изображений в одно, вовсе не нужен фотошоп - с этим прекрасно и быстро справляется nip2. Причём справляется тем лучше, чем больше изображений или фотографий нужно склеить. Например, если у вас имеются снимки со сканирующего микроскопа и нужно склеить десяток снимков - это лучше сделать в nip2. Для этого идём в меню Toolkits - Image - Join - Left to Right если хотим склеить изображения по горизонтали (левый край к правому краю) или Top to Bottom (если нужно склеить верхний край изображения к нижнему краю). Вот что при этом получается:


Пользуясь Toolbox - Image - Join, легко склеить несколько больших изображений в одно для последующего просмотра и анализа.


Корректировка перекоса яркости (tilt brightness)
Следует отметить, что при научных съёмках часто на изображениях появляется перекос яркости: когда одна часть изображения освещения сильнее другой (меняющаяся яркость от края изображения к середине). Этот достаточно неприятный эффект можно устранить в nip2 так: Tools - Filters - Tilt brightness.
Это позволит восстановить освещённость на изображении. А используя табличное свойство nip2, вы получаете возможность оперативно перерисовать большое изображение с учётом скорректированной яркости.

Вывод посчитанных данных
Вывод посчитанных значений из nip2 делается так: открываем меню View / Workspace Definitions, и пишем:

main = A1;
нажимаем "Process". После этого сохраняем Now save the workspace as "test.ws" and at the
command-line run:
$ nip2 -bp test.ws
и получите свои данные в консоли.

Резюме
Здесь я привёл несколько наиболее часто используемых мной возможностей nip2 для просмотра и анализа изображений. На всякий случай, особенности сборки последних версий nip2 в Linux описаны в этом посте.

7 комментариев: |высказаться!| RSS-лента дискуссии.|
Big 40wt Svetlyak комментирует...

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

virens комментирует...

2 Big 40wt Svetlyak пишет...
Не улавливаю практической ценности этой программы для обычного фотографа.
Она вообще-то не совсем для фотографов :-) Это скорее для научных работ - nip2 это система анализа изображений.

Как она может помочь мне с обработкой RAW файлов?
Для художественных работ nip2 не предназначен. Но если приходится просматривать и анализировать 12-битные изображения - он бесценен.

jetxee комментирует...

Спасибо за статью! Весьма любопытно и кругозорорасширяюще. Будем знать о таком инструменте. Может когда-нибудь пригодится :)

x[82] комментирует...

Вполне может быть, что буду воспользуюсь этим инструментом во время написания диплома. Спасибо.

virens комментирует...

2 jetxee пишет...
Спасибо за статью! Весьма любопытно и кругозорорасширяюще. Будем знать о таком инструменте. Может когда-нибудь пригодится :)
Он может пригодиться, когда придётся просматривать либо очень большие изображения, либо с нестандартной битностью - например, 12-битные сырые данные из RAW-файла. Удобно.

Так как сейчас плотно общаюсь с фотосенсорами, nip2 установил даже на лабораторные компьютеры :-)

2 x[82] пишет...
Вполне может быть, что буду воспользуюсь этим инструментом во время написания диплома. Спасибо.
Пожалуйста. Только учтите, что к интерфейсу nip2 требуется привыкание :-)

Вообще уникальная программа в своём роде. Под винду сборки искать трудно, а в Линуксе - клик-клик и готово.

wl комментирует...

А можно ли туда как-то импортировать сырые данные, в которых каждый байт (или слово) обозначают пиксель, а информация о числе байт на пиксель, высоте и ширине хранится отдельно?
Такие файлы GIMP открывает как Raw image data.

Да еще бы поддержку цветового пространства YUV :)

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

Был бы благодарен за советы по поводу работы с этой софтиной или какой другой.

virens комментирует...

@ wl комментирует...
А можно ли туда как-то импортировать сырые данные, в которых каждый байт (или слово) обозначают пиксель
Наверное да, если я всё правильно понимаю. Тот же CSV подпадает под ваше описание - и вполне себе импортируется.

Да еще бы поддержку цветового пространства YUV :)
Про цветовые пространства я не в теме. Кстати, можно автору этой программы написать - он очень общительный и отзывчивый товарищ.

разбираюсь с (де)кодированием видео, в целях отладки пишу в файл то, что получается на выходе декодера, и не очень понимаю, что вижу.
Аааа... Тогда должно открывать. Кстати, где-то в дебрях менюшек нипа видел что-то связанное с видеозахватом.

Был бы благодарен за советы по поводу работы с этой софтиной или какой другой.
У меня своя лужайка - я сырые данные с цифровых камер в nip2 анализирую. С видеоданными я не работал, так что увы.

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.