Целочисленная арифметика

Этот пример показывает, как выполнить арифметику целочисленных данных, представляющих сигналы и изображения.

Загрузка целочисленных данных сигнала

Загрузите наборы данных измерения, содержащие сигналы от четырех инструментов, использующих 8 и 16-битные A-to-D, что приводит к сохранению данных как int8, int16 и uint16. Время сохранено следующим uint16.

load integersignal

% Look at variables
whos Signal1 Signal2 Signal3 Signal4 Time1
  Name            Size            Bytes  Class     Attributes

  Signal1      7550x1              7550  int8                
  Signal2      7550x1              7550  int8                
  Signal3      7550x1             15100  int16               
  Signal4      7550x1             15100  uint16              
  Time1        7550x1             15100  uint16              

Графические данные

Сначала мы построим два сигнала, чтобы увидеть диапазоны сигнала.

plot(Time1, Signal1, Time1, Signal2);
grid;
legend('Signal1','Signal2');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Signal1, Signal2.

Вероятно, что эти значения должны быть масштабированы, чтобы вычислить фактическое физическое значение, которое представляет сигнал, например, В.

Обработка данных

Мы можем выполнить стандартную арифметику для целых чисел, таких как +, -, *, и /. Допустим, мы хотели найти сумму Signal1 и Signal2.

SumSig = Signal1 + Signal2; % Here we sum the integer signals.

Теперь постройте график сигнала суммы и посмотрим, где он насыщается.

cla;
plot(Time1, SumSig);
hold on
Saturated = (SumSig == intmin('int8')) | (SumSig == intmax('int8')); % Find where it has saturated
plot(Time1(Saturated),SumSig(Saturated),'rd')
grid
hold off

Figure contains an axes. The axes contains 2 objects of type line.

Маркеры показывают, где сигнал насыщен.

Загрузка целочисленных данных изображения

Далее рассмотрим арифметику по некоторым данным изображения.

street1 = imread('street1.jpg'); % Load image data
street2 = imread('street2.jpg');
whos street1 street2
  Name           Size                Bytes  Class    Attributes

  street1      480x640x3            921600  uint8              
  street2      480x640x3            921600  uint8              

Здесь мы видим, что изображения 24-битного цвета, сохраненные как три плоскости uint8 данные.

Отобразите изображения

Отобразите первое изображение.

cla;
image(street1); % Display image
axis equal
axis off

Figure contains an axes. The axes contains an object of type image.

Отобразите второе изображение

image(street2); % Display image
axis equal
axis off

Figure contains an axes. The axes contains an object of type image.

Масштабирование изображения

Мы можем масштабировать изображение на двойную точность константу, но сохраняем изображение в виде целых чисел. Для примера,

duller = 0.5 * street2; % Scale image with a double constant but create an integer
whos duller
  Name          Size                Bytes  Class    Attributes

  duller      480x640x3            921600  uint8              
subplot(1,2,1);
image(street2);
axis off equal tight
title('Original');  % Display image

subplot(1,2,2);
image(duller);
axis off equal tight
title('Duller');    % Display image

Figure contains 2 axes. Axes 1 with title Original contains an object of type image. Axes 2 with title Duller contains an object of type image.

Добавьте изображения

Мы можем добавить два изображения улицы вместе и построить призрачный результат.

combined = street1 + duller; % Add |uint8| images
subplot(1,1,1)
cla;
image(combined); % Display image
title('Combined');
axis equal
axis off

Figure contains an axes. The axes with title Combined contains an object of type image.