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
. Используйте эти индексы, чтобы "нарисовать" текст в изображение, содержавшееся в mandrill
Matfile. Используйте размер того изображения плюс местоположения строки и столбца текста, чтобы определить местоположения в новом изображении. Индексируйте в новое изображение, заменив пиксели.
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
изображения свойство включает копирование матрицы для использования изображения. Полный размер матрицы зависит от размера своих отдельных элементов. Используя меньшие отдельные элементы (т.е. меньший тип данных) уменьшает матричный размер и уменьшает количество времени, должен был скопировать матрицу.
Используйте самую маленькую приемлемую матрицу.
Если скорость, на которой отображено изображение, является вашим самым высоким приоритетом, вы, возможно, должны пойти на компромисс на размере и качестве изображения. Снова, уменьшение размера уменьшает время, должен был скопировать матрицу.
Установите предельные свойства режима (XLimMode
и YLimMode
) из ваших осей к manual
.
Если они установлены в auto
, затем каждый раз, когда объект (такой как изображение, линия, закрашенная фигура, и т.д.) изменяет некоторый аспект своих данных, оси должны повторно вычислить ее связанные свойства. Например, если вы задаете
image(firstimage); set(gca, 'xlimmode','manual',... 'ylimmode','manual',... 'zlimmode','manual',... 'climmode','manual',... 'alimmode','manual');
оси не повторно вычисляют ни одного из предельных значений прежде, чем перерисовать изображение.
Рассмотрите использование movie
возразите, должен ли основной момент вашей задачи просто отобразить серию изображений на экране.
MATLAB®
movie
объект использует базовые системные ресурсы графики непосредственно, вместо того, чтобы выполнить объектный код MATLAB. Это быстрее, чем повторная установка CData
изображения свойство, аналогичное описанному ранее.