exponenta event banner

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

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

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

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