Примечание
The image
и imagesc
команды создают объекты изображений. Объекты изображения являются дочерними элементами объектов осей, а также линий, закрашенных фигур, поверхностей и текстовых объектов. Как и все графические объекты, объект изображения имеет ряд свойств, которые можно задать, чтобы настроить его внешний вид на экране. Наиболее важными свойствами объекта изображения относительно внешнего вида являются CData
, CDataMapping
, XData
, и YData
. Эти свойства обсуждаются в этом и следующих разделах. Для получения подробной информации об этих и всех свойствах объекта изображения смотрите image
.
The CData
свойство объекта изображения содержит массив данных. В следующих командах h
- указатель на объект изображения, созданный image
и матрицы X
и Y
те же самые:
h = image(X); colormap(map) Y = get(h,'CData');
Размерность CData
массив управляет тем, отображениями ли изображение с помощью цветов палитры или в виде изображения RGB. Если на CData
массив является двумерным, изображение является либо индексированным изображением, либо изображением интенсивности; в любом случае изображение отображается с помощью цветов палитры. Если, с другой стороны, CData
массив m-на-n-на-3, он отображается как изображение truecolor, игнорируя цвета палитры.
The 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]
The 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
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
Чтобы увеличить скорость, с которой CData
свойство объекта изображения обновляется, оптимизируйте CData
и установите некоторые связанные рисунки и осей:
Используйте наименьший возможный тип данных. Использование uint8
тип данных для вашего изображения будет быстрее, чем использование double
тип данных.
Часть процесса настройки CData
изображения свойство включает копирование матрицы для использования изображением. Общий размер матрицы зависит от размера ее отдельных элементов. Использование небольших отдельных элементов (то есть меньшего типа данных) уменьшает размер матрицы и уменьшает количество времени, необходимое для копирования матрицы.
Используйте наименьшую приемлемую матрицу.
Если скорость, с которой изображение отображается, является вашим самым высоким приоритетом, вам, возможно, потребуется скомпрометировать размер и качество изображения. Снова, уменьшение размера сокращает время, необходимое для копирования матрицы.
Установите свойства предельного режима (XLimMode
и YLimMode
) ваших осей, чтобы manual
.
Если для них задано значение auto
затем каждый раз, когда объект (такой как изображение, линия, закрашенная фигура и т.д.) изменяет какой-либо аспект своих данных, оси должны пересчитывать его связанные свойства. Для примера, если вы задаете
image(firstimage); set(gca, 'xlimmode','manual',... 'ylimmode','manual',... 'zlimmode','manual',... 'climmode','manual',... 'alimmode','manual');
оси не пересчитывает ни одно из предельных значений перед перерисовкой изображения.
Рассмотрите использование a movie
объект, если основной точкой вашей задачи является простое отображение серии изображений на экране.
MATLAB®
movie
объект использует базовые ресурсы системной графики непосредственно, вместо выполнения объектного кода MATLAB. Это быстрее, чем неоднократно устанавливать CData
изображения свойство, как описано ранее.