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

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

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

Загрузите наборы данных измерения, включающие сигналы от четырех инструментов с помощью 8 и 16-битный А-ту-Д, получившийся в данных, сохраненных как int8int16 и 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.

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

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

Мы можем выполнить стандартную арифметику на целых числах, таких как +, -, *, и /. Скажем, мы хотели найти сумму 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.