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.
Для преобразования между форматами изображений доступны следующие вспомогательные функции.
- : dimg = im2double (img) ¶
- : dimg = im2double (img, "indexed") ¶
-
Преобразование изображения в формат с двойной точностью.
Преобразование img в формат с двойной точностью зависит от типа входного изображения. Поддерживаются следующие входные классы:
- ‘uint8, uint16, and int16’
-
Диапазон значений из класса масштабируется до интервала [0 1].
- ‘logical’
-
Значения true и false присваиваются значения 1 и 0 соответственно.
- ‘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-анимаций соответственно, где каждый кадр объединяется по четвёртому измерению.
- : frame = im2frame (rgb) ¶
- : frame = 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 цветовая палитра, переходящая от красного через жёлтый, синий, зелёный к фиолетовому. ————- ——————————————————————————————— ... (остальные строки таблицы) См. также: viridis, turbo, jet, cubehelix, hsv, rainbow, hot, cool, spring, summer, autumn, winter, gray, bone, copper, pink, ocean, colorcube, flag, lines, prism, white.
- : tf = iscolormap (cmap) ¶
-
Возвращает true, если cmap является цветовой палитрой.
Цветовая палитра — это вещественная матрица класса single или double с 3 столбцами. Каждая строка представляет собой один цвет. Три столбца содержат значения интенсивности красного, зелёного и синего цветов соответственно.
Все значения в цветовой палитре должны быть в диапазоне [0 1], но это не проверяется. Каждая функция должна сама решать, что делать со значениями, выходящими за этот диапазон.
Следующие функции возвращают предопределённые цветовые палитры, которые можно запросить по имени с помощью функции colormap.
- : rgbplot (cmap) ¶
- : rgbplot (cmap, style) ¶
- : h = rgbplot (…) ¶
-
Построить компоненты цветовой карты.
Доступны два различных стиля style для отображения cmap:
- profile (default)
-
Построить линейный профиль 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.
- : map = hsv () ¶
- : map = 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–2023 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/v8.1.0/Representing-Images.html