Importación de imágenes TIFF de 16 bits es un deseo de que JMP pueda cargar datos en escala de grises con más de 256 tonos de gris. Sugerí que Python podría ser una forma razonable de hacerlo antes de intentarlo. El primer archivo de prueba que creé con Gimp produjo un mensaje de error extraño en Python, que rastreé para indicar que "Python no puede importar los datos de escala de grises de 16 bits a menos que no haya otro canal (como un canal alfa u otro capa)." El valor predeterminado en Gimp tiene un canal alfa, y la reexportación sin él genera un archivo en escala de grises de 16 bits que Python puede cargar. La siguiente es una captura de pantalla PNG de 8 bits. La primera imagen es un poco de lava de Gimp, que se guardó como una escala de grises de 16 bits.
The delta noise image is multiplied by 30 to make the noise visible. It is nearly uniform gray on my display at < 10X. The truncation error is about 1/255 of the gray scale range.La imagen de ruido delta se multiplica por 30 para que el ruido sea visible. Es gris casi uniforme en mi pantalla a < 10X. El error de truncamiento es aproximadamente 1/255 del rango de escala de grises.
Las dos imágenes naranjas se ven idénticas. La conversión a los colores espectrales de la imagen inferior se realizó con datos de 16 bits, por lo que probablemente haya algunas diferencias. La imagen azul/gris/roja de textura tenue representa la diferencia entre los datos que generaron las dos imágenes naranjas. Si su cámara realmente puede producir datos de 10 o 12 o incluso 14 bits, esa precisión adicional puede ser importante. O bien, el rango dinámico puede ser importante.
Python Init();
path = Convert File Path(
Save Text File( "$temp/deleteme.tiff", // the 2channel file will fail - see link in message
Load Text File( "16bitgray1channel.tif", blob() ) // pic is part of the project, move to $temp
),
"windows"
);
// first import it using built-in image that truncates the bit depth
truncated = Color To RGB( New Image( path ) << getpixels )[1]; // use the red channel
// stretch truncated image bit depth 0 to 1
r = Range( truncated );//[0.00784 0.803]
min = r[1];
max = r[2];
truncated = (truncated - min) / (max - min); // 0 to 1
timage = New Image( Heat Color( 1 - truncated, "spectral" ) );
// now import with Python PIL to preserve the 16-bit depth
rc = Python Execute( {path}, {im}, "\[
import numpy as np
import PIL
from PIL import Image
try:
im = np.array(Image.open(path))
except Exception as e:
print("make sure there is only one channel (no alpha for example) see https://github.com/python-pillow/Pillow/issues/1888",e)
]\" );
If( rc, Throw( "python code failed" ) );
// stretch full image bit depth 0 to 1
r = Range( im ); //[530 52698]
min = r[1];
max = r[2];
full = (im - min) / (max - min);
fimage = New Image( Heat Color( 1 - full, "spectral" ) );
// diff and magnify the difference
magnify = 30;
delta = (full - truncated) * magnify; // small negative and positive diffs, scaled up to be visible
delta = delta + .5; // center
dimage = New Image( Heat Color( delta ) );
New Window( "compare", Lineup Box( N Col( 2 ),
textbox("original\!ngray\!nscale"),New Image( path ),
Text Box( "truncated\!nheatcolor\!nspectral" ), timage,
Text Box( evalinsert("delta\!ntimes ^magnify^\!nblue\!nto gray\!nto red\!n\!nfullres -\!ntruncated") ),
dimage, Text Box( "full res\!nheatcolor\!nspectral" ), fimage, ) );
Se adjunta un archivo de proyecto (JMP 16) con dos TIF; uno falla debido al canal adicional de datos alfa. Elimine el .zip para JMP 16 o use sus herramientas zip si está usando JMP anterior.
Gracias @RJ_Bailey !