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 n 3, это отображается как изображение истинного цвета, игнорируя цвета палитры.
Свойство 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
управляют системой координат изображения. Для изображения m на n XData
по умолчанию является [1 n]
, и YData
по умолчанию является [1 m]
. Эти настройки подразумевают следующее:
Левый столбец изображения имеет x-координату 1.
Правый столбец изображения имеет x-координату n.
Верхний ряд изображения имеет y-координату 1.
Нижний ряд изображения имеет y-координату m.
Используйте систему координат по умолчанию
Отобразите изображение с помощью системы координат по умолчанию. Используйте цвета из карты colorcube
.
C = [1 2 3 4; 5 6 7 8; 9 10 11 12]; im = image(C); colormap(colorcube)
Задайте систему координат
Отобразите изображение и задайте систему координат. Используйте цвета из карты 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)
Этот пример показывает, как использовать индексацию массива, чтобы растеризировать текст в существующее изображение.
Чертите текст в оси с помощью функции 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
. Используйте эти индексы, чтобы "нарисовать" текст в изображение, содержавшееся в MAT-файле mandrill
. Используйте размер того изображения плюс местоположения строки и столбца текста, чтобы определить местоположения в новом изображении. Индексируйте в новое изображение, заменив пиксели.
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
Чтобы увеличить уровень, на котором свойство CData
объекта изображения обновляет, оптимизируйте CData
и установите некоторую связанную фигуру и свойства осей:
Используйте самый маленький возможный тип данных. Используя тип данных uint8
для вашего изображения будет быстрее, чем использование типа данных double
.
Часть процесса установки свойства CData
изображения включает копирование матрицы для использования изображения. Полный размер матрицы зависит от размера ее отдельных элементов. Используя меньшие отдельные элементы (i. e., меньший тип данных), уменьшает матричный размер и уменьшает количество времени, должен был скопировать матрицу.
Используйте самую маленькую приемлемую матрицу.
Если скорость, на которой отображено изображение, является вашим самым высоким приоритетом, вы, возможно, должны пойти на компромисс на размере и качестве изображения. Снова, уменьшение размера уменьшает время, должен был скопировать матрицу.
Установите предельные свойства режима (XLimMode
и YLimMode
) ваших осей к manual
.
Если они установлены в auto
, то каждый раз объект (такой как изображение, строка, закрашенная фигура, и т.д.) изменяет некоторый аспект своих данных, оси должны повторно вычислить ее связанные свойства. Например, если вы задаете
image(firstimage); set(gca, 'xlimmode','manual',... 'ylimmode','manual',... 'zlimmode','manual',... 'climmode','manual',... 'alimmode','manual');
оси не повторно вычисляют ни одного из предельных значений прежде, чем перерисовать изображение.
Рассмотрите использование объекта movie
, если основной момент вашей задачи должен просто отобразить серию изображений на экране.
Объект MATLAB® movie
использует базовые системные ресурсы графики непосредственно, вместо того, чтобы выполнить объектный код MATLAB. Это быстрее, чем повторная установка свойства CData
изображения, как описано ранее.