red_plane = RGB (:,:,1);
Для доступа к части всего изображения можно использовать запись
subimage = RGB (20:40, 50:85, :)
Изображение в формате RGB является хорошим примером данных, для которых может пот-ребоваться доступ к отдельным плоскостям, для операций типа фильтрации или просто де-монстрации. В других задачах, однако, сами данные могут быть многомерными. Рассмотри, например, набор температур, измеренных на равномерной пространственной сетке какого-либо помещения.
В данном случае пространственное положение каждого значения температуры является составной частью набора данных , то есть физическое расположение в трехмерном прос-транстве является частью информации. Такие данные также весьма прспособлены для представления при помощи многомерных массивов (см.рисунок выше).
Здесь, чтобы найти среднее значение всех измерений, то есть среднюю температуру воздуха в комнате, можно записать
mean (mean (mean (TEMP)))
где через TEMP обозначен массив четырехмерных данных.
Дл получения вектора «серединных» температур (элемента (2,2)) комнаты на каждой странице, то есть в каждом сечении, запишем
B = TEMP (2, 2, :).
ОРГАНИЗАЦИЯ И ХРАНЕНИЕ ДАННЫХ
Для хранения различных типов данных в системе MATLAB используются так называемые структуры (structure) и ячейки (cell). Структуры (иногда их называют массивами структур) служат для хранения массивов различных типов данных, организаванных по принципу пои-менованных полей. Ячейки (или массивы ячеек) являются специальным классом массивов системы MATLAB, чьи элементы состоят из ячеек, в которых могут храниться любые другие массивы данных, применяемые в MATLAB-е. Как структуры, так и ячейки обеспечивают иерархический механизм для хранения самых различных типов данных. Они отличаются друг от друга прежде всего способом организации базы данных. При использовании струк-тур доступ к данным осуществляется при помощи наименований полей, тогда как в массивах ячеек доступ осуществляется при помощи матричной индексации.
В приведенных ниже таблицах дается краткое описание функций MATLAB-а, предназначен-ных для работы с массивами структур и ячеек
Структуры
Функция | Описание |
fieldnames | Получить имена полей |
getfield | Получить содержание поля |
isfield | Истинно, если поле есть в структуре |
isstruct | Истинно, если структура |
rmfield | Удалить поле |
setfield | Установить содержимое поля |
struct | Создать массив структур |
struct2cell | Преобразовать структуру в массив ячеек |
Ячейки
Функция | Описание |
cell | Создать массив ячеек |
cell2struct | Преобразовать массив ячеек в структуру |
celldisp | Показать содержимое массива ячеек |
cellfun | Применить функцию к массиву ячеек |
cellplot | Показать графическую структуру массива ячеек |
deal | Обмен данными между любыми классами массивов |
iscell | Истинно для массивов ячеек |
num2cell | Преобразовать числовой масси в массив ячеек |
МАССИВЫ СТРУКТУР
Структуры это массивы данных с поименованными «хранилищами» данных, называемыми полями. Поля структуры могут содержать данные любого типа. Например, одно поле может содержать текстовую строку, представляющую имя (name), второе поле может содержать скалярную переменную, являющуюся счетом за лечение (billing), третье может содержать матрицу результатов медицинских анализов (test) и так далее.
Как и обычным масивам данных, структурам присущи основные свойства массивов. Одна структура является структурой размера 1х1, точно так же как число 5 является числовым массивом размера 1х1. Вы можете строить структуры с лбой допустимой размерностью или формы, включая многомерные массивы структур.
Создание массивов структур
Имеется два следующих способа создания структур:
Создание массивов структур с применением операторов присваивания.
Вы можете построить простую структуру размера 1х1 путем прямого присваивания значений индивидуальным полям. MATLAB при этом автоматически конструирует соответствующую структуру. Например, создадим 1х1 структуру данных пациента лечебницы, показанную в начале данного раздела. Для этого следует ввести следующие записи:
patient.name = 'John Doe';
patient.billing = 127.00;
patient.test = [79 75 73; 180 178 177.5; 220 210 205];
Если ввести теперь в командной строке запись
patient
то MATLAB ответит
name: 'John Doe'
billing: 127
test: [3x3 double]
patient является массивом, представляющим собой структуру с тремя полями. Для расшире-ния данного массива нужно просто добавить соответствующие индексы после имени струк-туры:
patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169];
Структура patient имеет теперь размер [1 2]. Отметим, что если массив структур содержит более одного элемента, то MATLAB уже не выводит на экран содержание отдельных полей при вводе имени структуры. Взамен, на дисплей выдаются общая информация о содержимом структуры, то есть имена полей:
Patient
patient =
1x2 struct array with fields:
name
billing
test
Для получения данной информации вы можете также использовать функцию fieldnames. Данная функция выдает массив ячеек содержащих названия полей в форме строки. Если вы расширяете структуру, MATLAB запалняет те поля, в которые вы не ввели данные, пустыми матрицами так, что:
Например, при вводе
patient(3).name = 'Alan Johnson'
структура patient принимает размер 1х3. При это оба поля patient(3).billing и patient(3).test содержат пустые матрицы.
Внимание! Размеры данных в одноименных полях могут быть различными. В нашем при-мере со структурой patient поля name могут иметь различную длину, поля test могут содер-жать массивы числовых данных различных размеров и так далее.
Создание массива структур с использованием функции struct.
Вы можете заранее создать массив структур применив функцию struct. Ее основная форма имеет вид
str_array = struct ('поле1',знач1,'поле2',знач2, ...)
где аргументами являются имена полей и их соответствующие значения. Значением поля мо-жет быть или одно значение, представленное любой допустимой конструкцией в MATLAB-е, или массив ячеек данных (массивы ячеек рассмотрены в следующем разделе). Все значения полей в списке аргументов должны иметь одинаковый вид (единственное значение или мас-сив ячеек).
Вы можете использовать различные методы для задания массива структур. Эти методы отличаются способом инициализации полей структуры. В качестве примера расмотрим зада-ние структуры размера 1х3 с именем weather (погода), имеющую поля temp (температура)
и rainfall (дождевые осадки). Три различные способа задания такой структуры даны в приведенной ниже таблице.
Метод | Синтаксис | Задание |
Функция struct | weather(3) = struct('temp',72,'rainfall',0.0); | Структура weather(3) инициализируется с указан-ными значениями полей. По-ля остальных двух структур в массиве, weather(1) и weather(2), содержат в качес-тве данных пустые матрицы. |
Сочетание функций struct и repmat | weather = repmat (struct ('temp', 72, 'rainfall', 0.0), 1, 3); | Все структуры в массиве weather инициализируются с использованием одинаковых значений одноименных полей. |
Функция struct с использованием синтаксиса ячеек | weather = struct ('temp',{68, 80, 72}, 'rainfall', {0.2,0.4,0.0} ); | Структуры в массиве weather инициализируются с разными значениями полей, заданных массивом ячеек. |
Обращение к данным в массивах структур.
Используя индексацию массива структур, можно осуществить обращение к данным любого поля или любого элемента поля в массиве структуры. Аналогичным образом, вы можете за-дать значение любого поля или элемента поля структуры. В качестве примера, используемо-го в данном разделе, рассмотрим структуру, представленную на приведенном ниже рисунке.
Вы можете обратиться к подмассивам путем дабавления стандартной индексации к имени массива структур. Например, следующая запись приводит к структуре размера 1х2