"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

xTrue(2,3,2)=uint8(249); xTrue(2,3,3)=uint8 (5);
Массив xTrue создает изображение 2x3 пикселов с помощью вызова одной функции image ( xTrue ) (см. рис. 2.30).
¦ Figure No. I
Eile Edit Window Help 0.5
Рисунок 2.30
Если изображение находится в файле и вы заранее не знаете, какой оно имеет тип (индексное, то есть с палитрой цветов, или truecolor), то все равно его следует читать обычным образом:
[ X, тар ] = imread( 'name.xxx' )
В случае truecolor изображений массив X получит размер m x n x 3, а матрица палитры тар будет пустой:
size( map
О О
В дальнейшем функция image автоматически по размерности и размеру массива X распознает тип изображения и действует корректно в обоих случаях, а функция colormap при пустом входном массиве тар не делает ничего, так что оба этих случая могут быть обработаны одинаково.
MATLAB 5.x. Вычисления, визуализация, программирование 85
Однако если бы было заранее известно, что в файле содержится изображение типа truecolor, то его можно было бы прочитать более коротким кодом:
X = imread( 'name.xxx' )
а для показа этого изображения в графическом окне системы MATLAB было бы достаточно вызова одной лишь функции image (X).
Чтобы заранее узнать тип изображения в файле, нужно вызвать функцию
imfinfo( 'name.xxx1 )
Вот пример, когда на компьютере с 24-битовым графическим режимом работы видеоадаптера изображение из графического окна системы MATLAB сохраняется функцией capture в массивах X и тар. Затем эту информацию функцией imwrite записывают в JPEG-файл. В результате для этого файла функция imfinfo извлекает следующую справочную информацию (см. рис. 2.31):
•1 MATLAB Command Window НИ S3
?lc Edit Window Uelp
: 1 as .¦ a '¦>. s ё ?
»iimvrite(X,map,'inyfilcl.jpg') » iiufiufo('inyfilcl.jpg')
ans =
Filename: 'myfilel.jpg' FileModDate: '06-Jun-1999 18:50:51' FileSize: 29854
Fonnat: 'jpg' FomiatVersion: " WiclUi: 428 Ileisjit: 220 BitDepUi: 24 ColorType: 'Iniecolor1 FonnalSignnture: " -iJ-----------------:------------------------1______ -±И Рисунок 2.31
Отсюда видно, что изображение имеет тип truecolor. Это означает, что можно полностью обойтись без матрицы цветов. Действительно, в результате чтения такого файла
[X,map]=imread('myfilel. jpg') ;
получается пустая матрица цветов тар: тар =
1
86 Глава 2. Визуализация результатов вычислений
Кроме того, из полученной функцией imf inf о информации виден размер содержащегося в файле растрового изображения, равный 428 х220 пикселов. Указан также размер (FileSize) сжатого файла типа JPEG, в котором и размещается truecolor-изображение указанного размера. Этот размер равен 29 854 байтам. Если бы не было сжатия, предусмотренного специальным алгоритмом по спецификации JPEG, то тогда потребовалось бы для хранения файла 3 * 428 * 220 = 282 480 байт. За счет сжатия размер файла снижен примерно в 10 раз.
Глава 3
Массивы символов, структур, ячеек. Файловые операции
Массивы символов и тип данных char
До сих пор мы преимущественно имели дело с массивами вещественных или комплексных чисел. Про такие массивы говорят, что они имеют тип double. Это основной тип данных системы MATLAB, предназначенный для вычислений. В то же время при рассмотрении растровой графики мы столкнулись с типом данных короткое целое, обозначаемое ключевым словом uint8. Этот тип данных предназначен для компактного хранения больших массивов целых чисел, что очень характерно для графических задач. Однако производить вычисления с типом данных uint8 нельзя (по крайней мере в версиях системы MATLAB до 5.2 включительно). Если все же нужно произвести вычисления, то сначала тип данных uint8 приводят явно к типу double, производят вычисления и возвращаются к типу uint8 для дальнейшего хранения.
Во всех языках программирования, и MATLAB здесь не исключение, большую роль играют обработка и хранение текстовых данных (то есть текстов на естественных языках - английском, русском и т. д.). Для этой цели в системе MATLAB предусмотрен специальный символьный тип данных char (сокращение от английского слова character - символ, знак, буква, литера).
Каждому возможному символу (букве алфавита или специальному символу) в соответствии со стандартными таблицами кодировок ставится в соответствие целое числовое значение, для хранения которого в памяти машины всегда достаточно 2 байт памяти. Именно 2 байта и отводятся под каждый элемент символьного массива системы MATLAB.
Задать элемент символьного массива можно двумя способами. Во-первых, его можно задать целым числовым кодом, к которому применяется модификатор char:
cl(l) = char( 97 );
Здесь создан символьный массив cl размером 1x1, единственный элемент которого согласно всем стандартизованным на сегодняшний день кодовым таблицам (так называемый код ASCII) соответствует английской букве а. В этом легко убедиться с помощью следующих команд системы MATLAB (см. рис. 3.1):
88
Глава 3. Массивы символов, структур, ячеек. Файловые операции
•3 MATLAB Command Window
File Edit Window Help _ _
HHI3
»\vhoscl Name Size Bytes Class
cl lxl 2 char ян ay
Grand total is 1 elements using 2 bytes » cl ans =
±1 ii\' Рисунок 3.1
Во-вторых, того же результата можно добиться применением апострофов: cl(l) = 'а';