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');
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
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
Muestre la segunda imagen.
image(street2); % Display image axis equal axis off
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
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