guardar - ¿Por qué las figuras de Matlab generadas en un bucle tienen tamaños de archivo ligeramente diferentes?


Estoy realizando un barrido de parámetros. Dentro de un ciclo for, se cambia el valor de un parámetro. Basado en este parámetro, se produce un gráfico y se guarda como un archivo .tiff.

Noté que los archivos resultantes tienen tamaños de archivo ligeramente diferentes, por ejemplo

215, 222, 223, 215, 210, 196, 195, 195, 195, 195 KB.

Me preguntaba por qué no todos tienen exactamente el mismo tamaño de archivo.

EDITAR: MWE

1. pelea

Ejecutando

for a=1:3
    b=1:.01:10;
    h=figure(1);
    plot(b,sin(a*b))
    set(h,'units','normalized','outerposition',[0 0 1 1]);
    filename=horzcat('test_',num2str(a),'.tiff');
    print('-dtiff',filename)
end

produce 3 archivos con resp. tamaños de archivo 79, 95, 110kB.

2. bmp

Ejecutando

for a=1:3
    b=1:.01:10;
    h=figure(1);
    plot(b,sin(a*b))
    set(h,'units','normalized','outerposition',[0 0 1 1]);
    filename=horzcat('test_',num2str(a),'.bmp');
    print('-dbmp16m',filename)
end

produce 3 archivos con el mismo tamaño de archivo: 3165kB.



------------Respuesta------------

Es de esperar la diferencia en el tamaño del archivo.

En una imagen de mapa de bits (sin compresión), el valor de color de cada píxel se almacena en un archivo. No importa si todos los píxeles son blancos, negros o cualquiera que sea el valor decada uno será almacenado. Por esta razón, todas las imágenes de mapa de bits (de la misma dimensión y profundidad de color) tendrán el mismo tamaño. Está utilizando un mapa de bits de 24 bits, lo que significa que se asignan 24 bits por píxel en su figura. Más información sobre mapas de bits.

Un TIFF, por otro lado, es un poco más complicado. Como dijo @Andras, un TIFF se puede comprimir y la compresión depende del contenido de la imagen. Por ejemplo, si una imagen es completamente negra, eso es altamente comprimible bPorque es solo un valor de color para una imagen completa (resulta en un tamaño de archivo más pequeño). Si cada píxel es de un color diferente, es menos comprimible (lo que da como resultado un tamaño de archivo más grande).

En su ejemplo, está cambiando los datos en el gráfico que cambia la distribución de los colores de los píxeles en su imagen guardada, lo que finalmente cambiará ligeramente el tamaño del archivo de un TIFF de una iteración a otra. La única forma en que puede esperar el mismo tamaño de archivo es si sus datos son exactamenteel mismo y la figura es del mismo tamaño.

Etiquetas: matlab-figure figure size save matlab

Artículos relacionados:

La variable global en la función python no funciona para mi código

¿Cómo obtener datos de mi propia cuenta de Google Analytics usando claves de cuenta de servicio?