exponenta event banner

Объект изображения и его свойства

Образ CData

Примечание

image и imagesc команды создают объекты изображения. Объекты изображения являются потомками объектов осей, а также объектов линий, фрагментов, поверхностей и текста. Как и все графические объекты, объект изображения имеет ряд свойств, для которых можно настроить его внешний вид на экране. Наиболее важными свойствами объекта изображения в отношении внешнего вида являются CData, CDataMapping, XData, и YData. Эти свойства рассматриваются в этом и следующих разделах. Подробные сведения об этих и всех свойствах объекта изображения см. в разделе image.

CData свойство объекта изображения содержит массив данных. В следующих командах: h является дескриптором объекта изображения, созданного imageи матрицы X и Y одинаковы:

h = image(X); colormap(map)
Y = get(h,'CData');

Размерность CData управляет отображением изображения с использованием цветов карты цветов или в виде изображения RGB. Если CData массив является двумерным, изображение является либо индексированным изображением, либо изображением интенсивности; в любом случае изображение отображается с использованием цветов карты цветов. Если, с другой стороны, CData массив является m-by-n-by-3, он отображается в виде цветного изображения, игнорируя цвета карты цветов.

Изображение CDataMapping

CDataMapping свойство управляет тем, является ли изображение indexed или intensity. Для отображения индексированного изображения установите CDataMapping свойство для 'direct', так что значения CData используются непосредственно в качестве индексов в карте цветов рисунка. Когда image используется с одним входным аргументом, устанавливает значение CDataMapping кому 'direct':

h = image(X); colormap(map)
get(h,'CDataMapping')
ans =

direct

Изображения интенсивности отображаются путем установки CDataMapping свойство для 'scaled'. В этом случае CData значения линейно масштабируются для формирования индексов карты цветов. Оси CLim свойство управляет масштабными коэффициентами. imagesc создает объект изображения, CDataMapping свойство имеет значение 'scaled', и он корректирует CLim свойства родительских осей. Например:

h = imagesc(I,[0 1]); colormap(map)
get(h,'CDataMapping')
ans =

scaled

get(gca,'CLim')
ans =

[0 1]

XData и YData

XData и YData свойства управляют системой координат изображения. Для изображения m-by-n по умолчанию XData является [1 n] и значение по умолчанию YData является [1 m]. Эти настройки подразумевают следующее:

  • Левый столбец изображения имеет координату X, равную 1.

  • Правый столбец изображения имеет координату x, равную n.

  • Верхняя строка изображения имеет координату y, равную 1.

  • Нижний ряд изображения имеет координату y, равную м.

Система координат для изображений

Использовать систему координат по умолчанию

Отображение изображения с использованием системы координат по умолчанию. Использовать цвета из colorcube карта.

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
im = image(C);
colormap(colorcube)

Figure contains an axes. The axes contains an object of type image.

Указать систему координат

Отображение изображения и указание системы координат. Использовать цвета из colorcube карта.

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
x = [-1 2];
y = [2 4];
figure
image(x,y,C) 
colormap(colorcube)

Figure contains an axes. The axes contains an object of type image.

Добавить текст к данным изображения

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

Нарисуйте текст по осям с помощью команды text функция. Затем захватите текст с экрана с помощью getframe и закройте фигуру.

fig = figure;
t = text(.05,.1,'Mandrill Face','FontSize',20,'FontWeight','bold');
F = getframe(gca,[10 10 200 200]);
close(fig)

Выберите любую плоскость результирующего изображения RGB, возвращаемого getframe. Найдите черные пикселы (черный - 0) и преобразуйте их индексы в индексы с помощью sub2ind. Используйте эти подстрочные индексы для «заливки» текста в изображение, содержащееся в mandrill MAT-файл. Используйте размер этого изображения, а также расположение строк и столбцов текста, чтобы определить расположение нового изображения. Индексировать в новое изображение, заменяя пикселы.

c = F.cdata(:,:,1);
[i,j] = find(c==0);
load mandrill
ind = sub2ind(size(X),i,j);
X(ind) = uint8(255);

Отображение нового изображения с помощью карты цвета кости.

imagesc(X)
colormap bone

Figure contains an axes. The axes contains an object of type image.

Дополнительные методы быстрого обновления изображений

Чтобы увеличить скорость, с которой CData обновление свойства объекта изображения, оптимизация CData и задайте некоторые связанные свойства фигур и осей:

  • Используйте наименьший возможный тип данных. Использование uint8 тип данных для изображения будет быстрее, чем использование double тип данных.

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

  • Используйте наименьшую приемлемую матрицу.

    Если скорость, с которой изображение отображается, является наивысшим приоритетом, возможно, потребуется скомпрометировать размер и качество изображения. Опять же, уменьшение размера сокращает время, необходимое для копирования матрицы.

  • Задайте свойства предельного режима (XLimMode и YLimMode) ваших осей в manual.

    Если для них установлено значение auto, то каждый раз, когда объект (например, изображение, линия, фрагмент и т.д.) изменяет некоторый аспект своих данных, оси должны пересчитывать связанные с ним свойства. Например, при указании

    image(firstimage);
    set(gca, 'xlimmode','manual',...
    'ylimmode','manual',...
    'zlimmode','manual',...
    'climmode','manual',...
    'alimmode','manual');
    

    оси не пересчитывают ни одно из предельных значений перед перерисовкой изображения.

  • Рассмотрите возможность использования movie объект, если основной целью задачи является простое отображение серии изображений на экране.

    MATLAB ®movie объект использует базовые графические ресурсы системы непосредственно вместо выполнения кода объекта MATLAB. Это быстрее, чем многократная установка изображения CData свойство, как описано ранее.