32.3 Представление изображений
В целом Octave поддерживает четыре различных типа изображений: изображения в градациях серого, RGB-изображения, бинарные изображения и индексированные изображения. Изображение в градациях серого представляется матрицей M×N, в которой каждый элемент соответствует интенсивности пикселя. RGB-изображение представляется массивом M×N×3, где каждый 3-вектор соответствует красной, зеленой и синей интенсивностям каждого пикселя.
Фактическое значение интенсивности пикселя в изображении в градациях серого или RGB-изображении зависит от класса матрицы. Если матрица имеет класс double интенсивности пикселей находятся в диапазоне от 0 до 1, если она имеет класс uint8 интенсивности находятся в диапазоне от 0 до 255, а если она имеет класс uint16 интенсивности находятся в диапазоне от 0 до 65535.
Бинарное изображение представляет собой матрицу M×N класса logical. Пиксель в бинарном изображении черный, если он false, и белый, если он true.
Индексированное изображение состоит из матрицы M×N целых чисел и цветовой карты C×3. Каждое целое число соответствует индексу в цветовой карте, а каждая строка в цветовой карте соответствует RGB-цвету. Цветовая карта должна быть класса double со значениями от 0 до 1.
Для преобразования между форматами изображений доступны следующие вспомогательные функции.
- : im2double (img) ¶
- : im2double (img, "indexed") ¶
-
Преобразовать изображение в двойную точность.
Преобразование img в двойную точность зависит от типа входного изображения. Поддерживаются следующие входные классы:
- ‘uint8, uint16, and int16’
-
Диапазон значений класса масштабируется до интервала [0 1].
- ‘logical’
-
Значения true и false присваиваются значения 0 и 1 соответственно.
- ‘single’
-
Значения преобразуются в double.
- ‘double’
-
Возвращает то же изображение.
Если img является индексированным изображением, то вторым аргументом должна быть строка
"indexed". В этом случае img должен быть либо класса с плавающей точкой, либо класса без знака целого числа, и он будет просто преобразован в double. Если это класс целого числа, применяется смещение +1.См. также: double.
- : img = gray2ind (I) ¶
- : img = gray2ind (I, n) ¶
- : img = gray2ind (BW) ¶
- : img = gray2ind (BW, n) ¶
- : [img, map] = gray2ind (…) ¶
-
Преобразовать изображение в градациях серого или бинарное изображение интенсивности в индексированное изображение.
Индексированное изображение будет содержать n различных значений интенсивности. Если n не задано, по умолчанию оно равно 64 для изображений в градациях серого или 2 для бинарных черно-белых изображений.
Выходное значение img имеет класс uint8, если n меньше или равно 256; в противном случае возвращаемый класс - uint16.
- : I = ind2gray (x, map) ¶
-
Преобразовать цветное индексированное изображение в изображение интенсивности в градациях серого.
Изображение x должно быть индексированным изображением, которое будет преобразовано с использованием цветовой карты map. Если map не содержит достаточно цветов для изображения, пиксели в x за пределами диапазона отображаются на последний цвет в карте перед преобразованием в градации серого.
Выходное значение I имеет тот же класс, что и входное значение x, и может быть одним из
uint8,uint16,single, илиdouble.Примечание по реализации: существует несколько способов преобразования цветов в интенсивности в градациях серого. Эта функция использует значение яркости, полученное из
rgb2gray, которое составляетI = 0.299*R + 0.587*G + 0.114*B. Другие возможности включают компонент значения изrgb2hsvили использование одного цветового канала изind2rgb.
- : [x, map] = rgb2ind (rgb) ¶
- : [x, map] = rgb2ind (R, G, B) ¶
-
Преобразовать изображение в цветовом пространстве red-green-blue (RGB) в индексированное изображение.
Входное изображение rgb может быть задано как одна матрица размером MxNx3 или как три отдельные переменные, R, G и B, его три цветовых канала: красный, зеленый и синий.
Он выдает индексированное изображение x и цветовую карту map для точного интерпретации изображения точно так же, как и входное. Квантование цвета или другие формы растрирования не выполняются. Выходной класс индексированного изображения x может быть uint8, uint16 или double, в зависимости от того, что требуется для указания количества уникальных цветов в изображении (которое будет равно количеству строк в map) в порядке.
Также поддерживаются многомерные индексированные изображения (размером MxNx3xK), как с помощью одного входного сигнала (rgb), так и с помощью трех цветовых каналов в качестве отдельных переменных.
- : rgb = ind2rgb (x, map) ¶
- : [R, G, B] = ind2rgb (x, map) ¶
-
Преобразовать индексированное изображение в красные, зеленые и синие цветовые компоненты.
Изображение x должно быть индексированным изображением, которое будет преобразовано с использованием цветовой карты map. Если map не содержит достаточно цветов для изображения, пиксели в x за пределами диапазона отображаются на последний цвет в карте.
Выходным результатом может быть одно RGB-изображение (матрица MxNx3, где M и N - исходные размеры изображения x, по одной для каждого из красного, зеленого и синего каналов). В качестве альтернативы могут быть возвращены отдельные красные, зеленые и синие цветовые матрицы размером MxN.
Также поддерживаются многомерные индексированные изображения (размером MxNx1xK).
Octave также предоставляет инструменты для создания и работы со структурами кадров фильмов. Эти структуры инкапсулируют данные изображения (поле "cdata") вместе с соответствующей цветовой картой (поле "colormap").
- : frame = getframe () ¶
- : frame = getframe (hax) ¶
- : frame = getframe (hfig) ¶
- : frame = getframe (…, rect) ¶
-
Захватить рисунок или оси в виде структуры кадра фильма.
Без аргументов, захватить текущие оси, исключая метки делений, заголовок и метки x/y/z. Возвращаемая структура frame имеет поле
cdata, которое содержит фактические данные изображения в виде матрицы NxMx3 (RGB) uint8, и полеcolormap, которое предоставляется для совместимости с MATLAB, но всегда пусто.Если первый аргумент hax является дескриптором оси, то захватить эту ось, а не текущую ось, возвращаемую
gca.Если первый аргумент hfig является дескриптором рисунка, то захватывается весь соответствующий холст рисунка.
Наконец, если предоставлен второй аргумент rect, он должен быть вектором из четырех элементов ([левый нижний ширина высота]), определяющим область внутри рисунка, которая должна быть захвачена. Независимо от свойства рисунка
"units", rect должен быть определен в пикселях.
- : movie (mov) ¶
- : movie (mov, n) ¶
- : movie (mov, n, fps) ¶
- : movie (h, …) ¶
-
Воспроизвести анимацию, заданную набором структур кадров.
Массив mov должен быть структурой кадров с полями
"cdata"и"colormap", как возвращает функцияgetframe. По умолчанию все изображения отображаются один раз со скоростью 12 кадров в секунду на текущих осях.Необязательный аргумент n является скаляром или вектором целых чисел, которые управляют количеством воспроизведений анимации и отображаемыми кадрами:
- Первый элемент:
-
- n(1) > 0
-
Анимация воспроизведется n(1) раз.
- n(1) < 0
Анимация будет воспроизводиться n(1) раз попеременно в прямом и обратном порядке.
- Другие элементы (если есть):
Индексы кадров в mov, которые будут отображаться.
Если первый аргумент является дескриптором фигуры или осей h, анимация воспроизведётся в этой фигуре или на этих осях, а не на текущих.
- : [x, map] = frame2im (frame) ¶
-
Преобразовать кадр анимации в индексированное изображение.
Кадр анимации представляет собой структуру с полями
"cdata"и"colormap".Поддержка N-мерных изображений или анимаций предоставляется, когда frame является массивом структур. В таких случаях x будет MxNx1xK или MxNx3xK для индексированных и RGB анимаций соответственно, причём каждый кадр конкатенируется по четвёртому измерению.
- : im2frame (rgb) ¶
- : im2frame (x, map) ¶
-
Преобразовать изображение в кадр анимации.
Кадр анимации представляет собой структуру с полями
"cdata"и"colormap".Поддержка N-мерных изображений предоставляется, когда каждое изображение проекции, размерности MxN и MxNx3 для RGB изображений, конкатенируется по четвёртому измерению. В таких случаях возвращаемое значение является массивом структур.
См. также: frame2im.
Функция colormap используется для изменения цветовой карты текущих осей или фигуры.
- : cmap = colormap () ¶
- : cmap = colormap (map) ¶
-
: cmap = colormap (
"default") ¶ - : cmap = colormap (map_name) ¶
- : cmap = colormap (hax, …) ¶
- : colormap map_name ¶
-
Запрос или установка текущей цветовой карты.
Без входных аргументов, функция
colormapвозвращает текущую цветовую карту.colormap (map)устанавливает текущую цветовую карту на map. Цветовая карта должна быть матрицей n строк на 3 столбца. Столбцы содержат значения интенсивности красного, зелёного и синего цветов соответственно. Все значения должны быть в диапазоне от 0 до 1 включительно. Новая цветовая карта возвращается.colormap (восстанавливает цветовую карту по умолчанию (карта"default")viridisс 64 значениями). Возвращается цветовая карта по умолчанию.Цветовая карта может быть также задана строкой, map_name, которая является именем функции, возвращающей цветовую карту.
Если первый аргумент hax является дескриптором осей, то цветовая карта для этих осей запрашивается или устанавливается.
Для удобства также можно использовать эту функцию в командной форме,
colormap map_name.Список встроенных цветовых карт:
Карта Описание viridis по умолчанию turbo цветовая карта, проходящая через синий, голубой, зелёный, жёлтый, красный; современная замена для jet. jet цветовая карта, проходящая через синий, голубой, зелёный, жёлтый, красный. cubehelix цветовая карта, проходящая через чёрный, синий, зелёный, красный, белый с увеличением интенсивности. hsv циклическая цветовая карта, проходящая через пространство Цветовой тон, Насыщенность, Значение. rainbow цветовая карта, проходящая через красный, жёлтый, синий, зелёный, фиолетовый. ————- ——————————————————————————————— ... (rest of the table) См. также: viridis, turbo, jet, cubehelix, hsv, rainbow, hot, cool, spring, summer, autumn, winter, gray, bone, copper, pink, ocean, colorcube, flag, lines, prism, white.
- : iscolormap (cmap) ¶
-
Возвращает true, если cmap является цветовой картой.
Цветовая карта — это вещественная матрица, класса single или double, с 3 столбцами. Каждая строка представляет отдельный цвет. 3 столбца содержат значения интенсивности красного, зелёного и синего цветов соответственно.
Все значения в цветовой карте должны быть в диапазоне [0 1], но это не проверяется. Каждая функция должна сама определять, что делать со значениями за пределами этого диапазона.
Следующие функции возвращают предопределённые цветовые карты, которые можно запросить по имени с помощью функции colormap.
- : rgbplot (cmap) ¶
- : rgbplot (cmap, style) ¶
- : h = rgbplot (…) ¶
-
Построить компоненты цветовой карты.
Доступны два разных style для отображения cmap:
- profile (по умолчанию)
-
Построить профиль линии RGB цветовой карты для каждого из каналов (красный, зеленый и синий) с линиями графика, окрашенными соответствующим образом. Каждая линия представляет интенсивность компонента RGB по всей цветовой карте.
- composite
-
Нарисовать цветовую карту по оси X так, чтобы были видны фактические цвета индексов, а не отдельные цветовые компоненты.
Необязательное возвращаемое значение h является графической дескриптором созданного графика.
Запустите
demo rgbplotчтобы увидеть примерrgbplotи каждый вариант стиля.См. также: colormap.
- : map = autumn () ¶
- : map = autumn (n) ¶
-
Создать цветовую карту. Эта цветовая карта варьируется от красного через оранжевый до желтого.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = bone () ¶
- : map = bone (n) ¶
-
Создать цветовую карту. Эта цветовая карта варьируется от черного до белого с серо-голубыми оттенками.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = colorcube () ¶
- : map = colorcube (n) ¶
-
Создать цветовую карту. Эта цветовая карта состоит из максимально возможного количества равномерно распределенных цветов (не серых) в цветовом пространстве RGB.
Если нет идеального числа n равномерно распределенных цветов, то оставшиеся записи в цветовой карте представляют собой градиенты чистого красного, зеленого, синего и серого.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = cool () ¶
- : map = cool (n) ¶
-
Создать цветовую карту. Цветовая карта варьируется от голубого до пурпурного.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = copper () ¶
- : map = copper (n) ¶
-
Создать цветовую карту. Эта цветовая карта варьируется от черного до светло-медного тона.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = cubehelix () ¶
- : map = cubehelix (n) ¶
- : map = cubehelix (n, start, rots, hue, gamma) ¶
-
Создать цветовую карту cubehelix.
Эта цветовая карта варьируется от черного до белого, проходя через синие, зеленые и красные тона, сохраняя при этом монотонно возрастающее восприятие интенсивности. Это достигается путем прохождения цветового куба от черного к белому через спираль, отсюда и название cubehelix, с учетом воспринимаемой яркости каждого канала в соответствии со спецификациями NTSC 1953 года.
rgbplot (cubehelix (256))
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
Ссылка: Green, D. A., 2011, A colour scheme for the display of astronomical intensity images, Bulletin of the Astronomical Society of India, 39, 289.
См. также: colormap.
- : map = flag () ¶
- : map = flag (n) ¶
-
Создать цветовую карту. Эта цветовая карта циклически проходит через красный, белый, синий и черный при каждом изменении индекса.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = gray () ¶
- : map = gray (n) ¶
-
Создать серую цветовую карту. Эта цветовая карта варьируется от черного до белого с оттенками серого.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = hot () ¶
- : map = hot (n) ¶
-
Создать цветовую карту. Эта цветовая карта варьируется от черного через темно-красный, красный, оранжевый, желтый до белого.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : hsv (n) ¶
-
Создать цветовую карту. Эта цветовая карта начинается с красного, изменяется через желтый, зеленый, голубой, синий и пурпурный, прежде чем вернуться к красному.
Она полезна для отображения периодических функций. Карта получается путем линейного изменения оттенка через все возможные значения при сохранении постоянной максимальной насыщенности и яркости. Эквивалентный код:
hsv2rgb ([(0:N-1)'/N, ones(N,2)]).Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = jet () ¶
- : map = jet (n) ¶
-
Создать цветовую карту. Эта цветовая карта варьируется от темно-синего через синий, голубой, зеленый, желтый, красный до темно-красного.
Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
Замечание к программированию: Цветовая карта
jetне является перцептивно равномерной. Попробуйте цветовую картуviridis, если это важно. В качестве замены дляjetс лучшими перцептивными характеристиками попробуйте цветовую картуturbo.
- : map = lines () ¶
- : map = lines (n) ¶
-
Создать цветовую карту. Эта цветовая карта состоит из списка цветов в свойстве текущих осей
"ColorOrder". По умолчанию это синий, оранжевый, желтый, фиолетовый, зеленый, светло-голубой и темно-красный.Аргумент n должен быть скаляром. Если не указано, используется длина текущей цветовой карты или 64.
См. также: colormap.
- : map = ocean () ¶
- : map = ocean (n) ¶
-
Создайте цветовую палитру. Эта палитра варьируется от чёрного до белого с оттенками синего.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = pink () ¶
- : map = pink (n) ¶
-
Создайте цветовую палитру. Эта палитра варьируется от чёрного до белого с оттенками серо-розового.
Эта палитра придаёт изображениям в оттенках серого сепийный тон.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = prism () ¶
- : map = prism (n) ¶
-
Создайте цветовую палитру. Эта палитра циклически переключается между красным, оранжевым, жёлтым, зелёным, синим и фиолетовым при каждом изменении индекса.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = rainbow () ¶
- : map = rainbow (n) ¶
-
Создайте цветовую палитру. Эта палитра изменяется от красного через оранжевый, жёлтый, зелёный, синий до фиолетового.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = spring () ¶
- : map = spring (n) ¶
-
Создайте цветовую палитру. Эта палитра изменяется от пурпурного до жёлтого.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = summer () ¶
- : map = summer (n) ¶
-
Создайте цветовую палитру. Эта палитра изменяется от зелёного до жёлтого.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = turbo () ¶
- : map = turbo (n) ¶
-
Создайте цветовую палитру. Эта палитра изменяется от тёмно-синего через зелёный до тёмно-красного; подобна устаревшей
jetпалитре, но с равномерным восприятием.Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = viridis () ¶
- : map = viridis (n) ¶
-
Создайте цветовую палитру. Эта палитра изменяется от тёмно-пурпурно-синего через синий, зелёный до жёлтого.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = white () ¶
- : map = white (n) ¶
-
Создайте цветовую палитру. Эта палитра полностью белая.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : map = winter () ¶
- : map = winter (n) ¶
-
Создайте цветовую палитру. Эта палитра изменяется от синего до зелёного.
Аргумент n должен быть скалярным. Если не указано, используется длина текущей цветовой палитры или 64.
См. также: colormap.
- : cmap = contrast (x) ¶
- : cmap = contrast (x, n) ¶
-
Возвращает серую цветовую палитру, которая максимизирует контраст на изображении.
Возвращаемая цветовая палитра будет иметь n строк. Если n не определён, используется размер текущей цветовой палитры.
Три следующие функции изменяют существующую цветовую палитру, а не заменяют её.
- : map_out = brighten (beta) ¶
- : map_out = brighten (map, beta) ¶
- : map_out = brighten (h, beta) ¶
- : brighten (…) ¶
-
Усиление или затемнение цветовой палитры.
Аргумент beta должен быть скалярным значением от -1 до 1, где отрицательное значение затемняет, а положительное — усиливает цветовую палитру.
Если аргумент map опущен, функция применяется к текущей цветовой палитре.
Первый аргумент также может быть допустимым графическим дескриптором h, в этом случае
brightenприменяется к цветовой палитре, связанной с этим дескриптором.Если выходной параметр не указан, результат записывается в текущую цветовую палитру.
- : spinmap () ¶
- : spinmap (t) ¶
- : spinmap (t, inc) ¶
- : spinmap ("inf") ¶
-
Циклически меняет цветовую палитру в течение t секунд с шагом цвета inc.
Оба параметра необязательны. По умолчанию время цикла составляет 5 секунд, а шаг — 2. Если задан вариант
"inf", цикл будет продолжаться до нажатия Control-C.При вращении цвет 1 становится цветом 2, цвет 2 — цветом 3 и т. д. Разрешается положительный или отрицательный шаг, а более высокое значение inc вызовет более быстрое прохождение по цветовой палитре.
См. также: colormap.
- : whitebg () ¶
- : whitebg (color) ¶
- : whitebg ("none") ¶
- : whitebg (hfig) ¶
- : whitebg (hfig, color) ¶
- : whitebg (hfig, "none") ¶
-
Инвертирует цвета в текущей цветовой схеме.
Корневые свойства также инвертируются, так что все последующие графики будут использовать новую цветовую схему.
Если присутствует необязательный аргумент color, то цвет фона устанавливается в color, а не инвертируется. color может быть строкой, представляющей один из восьми известных цветов, или троицей RGB. Специальный строковый аргумент
"none"восстанавливает график до заводских значений цветов.Если первый аргумент hfig — это дескриптор фигуры или список дескрипторов фигур, то операции выполняются с этими фигурами, а не с текущей фигурой, возвращаемой
gcf. Корневые свойства не будут изменены, если 0 не входит в список фигур.Примечание по программированию:
whitebgработает, изменяя свойства цвета дочерних элементов указанных фигур. Изменяются только объекты с одним цветом. Например, область с одним"FaceColor"будет изменена, но область с заливкой ("interp") не будет модифицирована. При инверсии новый цвет просто является инверсией в RGB-пространстве:cnew = [1-R 1-G 1-B]. Когда цвет задан, оси и фигура устанавливаются в новый цвет, а цвет дочерних объектов затем корректируется для обеспечения контраста (видимости) на новом фоне.
Следующие функции могут использоваться для управления цветовыми картами.
- : [Y, newmap] = cmunique (X, map) ¶
- : [Y, newmap] = cmunique (RGB) ¶
- : [Y, newmap] = cmunique (I) ¶
-
Преобразует входное изображение X в выходное индексированное изображение Y, использующее минимально возможную цветовую карту newmap.
Когда вход — индексированное изображение (X с цветовой картой map), выход — это цветовая карта newmap, из которой были удалены повторяющиеся строки. Выходное изображение Y — это исходное входное изображение с индексами, соответствующими новой, возможно меньшей, цветовой карте.
Когда вход — RGB-изображение (матрица MxNx3), выходная цветовая карта будет содержать одну запись для каждого уникального цвета в исходном изображении. В худшем случае новая карта может содержать столько строк, сколько пикселей в исходном изображении.
Когда вход — изображение в оттенках серого I, выходная цветовая карта будет содержать одну запись для каждого уникального значения интенсивности в исходном изображении. В худшем случае новая карта может содержать столько строк, сколько пикселей в исходном изображении.
Детали реализации:
newmap всегда является матрицей Mx3, даже если входное изображение — изображение в оттенках серого I (все три RGB-плоскости имеют одинаковое значение).
Выходное изображение имеет тип uint8, если размер новой цветовой карты меньше или равен 256. В противном случае выходное изображение имеет тип double.
- : [Y, newmap] = cmpermute (X, map) ¶
- : [Y, newmap] = cmpermute (X, map, index) ¶
-
Переупорядочивает цвета в цветовой карте.
При вызове с двумя аргументами
cmpermuteслучайным образом переупорядочивает цветовую карту map и возвращает новую цветовую карту newmap. Также возвращается индексированное изображение Y, эквивалентное исходному входному изображению X при отображении с помощью newmap.При вызове с необязательным третьим аргументом порядок цветов в новой цветовой карте определяется index.
Внимание: index не должен содержать повторяющихся элементов, иначе функция завершится с ошибкой.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/Representing-Images.html