Форматы представления чисел и типы данных, используемых при обработке изображений
Математические выражения содержат числа и символы. В силу того, что в ЭВМ элементом информации является бит, принимающий значение 0 или 1, то представление символьных и числовых величин имеет ограничение в некотором диапазоне, измеряемом в битах или байтах. Байт равен 4 битам. Таким образом, максимальное количество вариантов чисел, которые могут быть представлены 1 байтом равно 24=16. Тогда с учетом нулевого значения с помощью одного байта можно получить положительное целое число из отрезка [0,15]. Если один бит выделить под информацию о знаке числа, то один байт соответствует отрезку [-8,7]. Базовым форматом представления целых чисел является int8, использующий 2 байта, т.е. 8 бит. Первый бит выделяется на знак числа, остальные 7 бит позволяют генерировать числа не более 27=128. Таким образом, формат int8 соответствует целым числам из интервала [-128,127].
В таблице перечислены основные типы данных MATLAB.
Имя | Описание | |
1. | logical | Значения 0 или 1 (1 бит на элемент). |
2. | int8 | Целые со знаком в интервале [-128,127](2байта) |
3. | uint8 | Целые без знака в интервале [0,255] (2 байта) |
4. | int16 | Целые со знаком в интервале [-32768,32767] (4 байта) |
5. | uint16 | Целые без знака в интервале [0,65535] (4 байта) |
6. | int32 | Целые со знаком в интервале [-2147483648, 2147483647] (8 байтов) |
7. | uint32 | Целые без знака в интервале [0,4294967295] (8 байтов) |
8. | single | Вещественные числа с плавающей запятой обычной точности в диапазоне от -1038 до 1038 (4 байта) |
9. | double | Вещественные числа с плавающей запятой двойной точности в диапазоне от -10308 до 10308 |
10. | char | Символы (буквы и знаки) (2 байта на символ) |
Пример 2.1.
1. 201 – целое число, тип unit8 или int8
2. -122 – целое число, тип int8
3. -8.256 – действительное число, тип single
4. 47584930274847.9994 - действительное число, тип double:
>> x=47584930274847.9994
x = % представления числа типа
4.7585e+013 % double в MATLAB
5. АВС1 – char, символьный тип
Упражнение 2.1.
а). Почему число -122 не относится к типу unit8?
б). Если a=2 и b=16, к какому типу следует отнести результат операции деления c=a/b, чтобы он был по возможности более точным?
в). Если a, b и c принадлежат unit8, a=45, b=17, c=a/b, чему равно c?
Массивы.
Массивы (array) представляют собой структуры, используемые в языках программирования для работы с наборами (упорядоченными последовательностями) чисел одного типа. Естественно, что компьютер может работать только с конечными наборами чисел. Таким образом, массив – это функция на упорядоченной последовательности чисел , таких что , , количество чисел в . Число kназывается размерностью массива или числом индексов массива.
Например, Х={f(1),f(2),f(3),f(4),f(5)}={5,10,34,56,70} – одномерный массив целых чисел, где А1={1,2,3,4,5};
f(1,1), f(1,2), f(1,3), f(1,4) 3.5, - 6, 90,1.9
Y= f(2,1), f(2,2), f(2,3), f(2,4) = 5.1 1.1, 40, 48 -
f(3,1), f(3,2), f(3,3), f(3,4) -60, 3.4,-1.6, 9
двумерный массив действительных чисел, где А1={1,2,3}, А2={1,2,3,4}.
Двумерный массив, таким образом, является структурой программирования, соответсвующей математическому понятию матрица. Визуально матрица представляется в виде таблицы чисел
А = ,где m – число строк, n – число столбцов, прозвольный элемент имеет два индекса: i - номер строки, j – номер столбца. Размером матрицы А называется пара m ´ n.
Каждый язык программирования имеет ограничения на k-число наборов в массиве. В С++ величина k не превосходит 12. Для MATLAB наиболее часто используются случаи k=1 и 2.
Одномерные массивы (конечная последовательность чисел) инициализируются в MATLAB в квадратных скобках, разделители – пробелы или запятые. Индексация массивов начинается с единицы.
Пример 2.2.
а) >> v=[3V5V6V7V2] % Ввод целочисленного вектора
v = % Значение переменной v
3 5 6 7 2
б)>> v(2) % Запрос значения координат
% вектора v с номером 2
ans =
в)>> v2=v(2);v2 % Запрос значения координат
% вектора v с номером 2
v2 =
г)>> v(1:3) % Запрос значений координат
% вектора v начиная с номера
% 1 до номера 3
ans =
3 5 6
Замечание. В примере 2.2.б в запросе не указано точное имя переменной вывода, поэтому в ответе используется имя “ans”.
В примере 2.2.в мы указали имя выводимой переменной “v2” и в ответе компьютера оно появилось.
Для доступа к блоку элементов массива используется символ «:».
Для ввода матриц (прямоугольной таблицы) в качестве разделителя строк используется символ «;».
Пример 2.3.
а) Ввод матрицы А размер 3 х 3.
>> A = [1V2V3;V2V3V4;V5V4V3] % Ввод элементов
% матрицы А 3х3
A = % Проверка
1 2 3
2 3 4
5 4 3
б) Ввод ранжированного вектора x= {1, 3, 5, 7, 9}
>> x = 1:2:9 % Указываются начальное значение,
% разделитель ‘:’, шаг, разделитель,
% конечное значение
Операторы
Операторы MATLAB разделены на три основные категории:
- арифметические операторы;
- операторы сравнения;
- логические операторы.
Операции с числами
В MATLAB существуют следующие арифметические операторы:
+ | сложение |
- | вычитание |
* | умножение |
^ | возведение в степень |
Операции с матрицами
+ | сложение |
- | вычитание |
* | умножение |
/ | правостороннее деление |
\ | левостороннее деление |
^ | возведение в степень |
' | транспонирование |
Следующие операторы могут быть применены к матрицам (двумерным массивам):
а) A+B - сложение матриц одинакового размера,
б) A-B - вычитание матриц одинакового размера,
в) A*B - обозначает произведение матриц A и B по правилам линейной алгебры (число столбцов А равно числу строк В):
если , то
г) A .* B - обозначает операцию над матрицами одинакового размера, результатом которой является матрица такого же размера, что A и B, каждый элемент которой получается как произведение соответствующих элементов исходных матриц; если , то
д) В/А - возвращает матрицу, равную . Результат является решением матричного уравнения . Использование оператора в виде В. /А создает матрицу С с элементами
е) A\B - возвращает матрицу, равную . Результат является решением матричного уравнения . Использование оператора в виде В.\А создает матрицу С с элементами
ж) A’ - транспонирование матрицы (aij ® (j,i)).
Замечание.Левостороннее и правостороннее операции деления матриц связаны соотношением
Пример 2.4. Применим операции деления к числам 4 и 2 как
матрицам размера 1*1. Результатом действия оператора 4/2 будет число 2, а 4\2 дает соответственно 0.5.