Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Aritmética de enteros

Este ejemplo muestra cómo ejecutar aritmética en datos enteros que representan señales e imágenes.

Cargar datos enteros de señales

Cargue conjuntos de datos de medición que incluyan señales desde cuatro instrumentos utilizando convertidores de digital a analógico de 8 y 16 bits que generen datos guardados como int8, int16 y uint16. El tiempo se almacena como 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              

Representar datos

Primero, representaremos dos de las señales para ver los intervalos de señal.

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

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

Es probable que haya que escalar estos valores para calcular el valor físico real que representa la señal, por ejemplo, voltios.

Procesar datos

Se pueden ejecutar operaciones aritméticas estándar en valores enteros, como +, -, * y /. Supongamos que deseamos encontrar la suma de Signal1 y Signal2.

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

A continuación, representemos la señal de suma y veamos dónde satura.

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 object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

Los marcadores muestran dónde ha saturado la señal.

Cargar datos enteros de imágenes

Ahora veremos la aritmética en algunos datos de imágenes.

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              

Aquí vemos que las imágenes son en 24 bits de color, almacenadas como tres planos de datos uint8.

Visualizar imágenes

Muestre la primera imagen.

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

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

Muestre la segunda imagen.

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

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

Escalar una imagen

Podemos escalar la imagen con una constante de precisión doble, pero almacenar igualmente la imagen como valores enteros. Por ejemplo:

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 objects. Axes object 1 with title Original contains an object of type image. Axes object 2 with title Duller contains an object of type image.

Sumar las imágenes

Podemos sumar las dos imágenes de calles y representar el resultado superpuesto.

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 object. The axes object with title Combined contains an object of type image.