Note
Go to the end to download the full example code.
12.1.10.1.4. Load and save dataObject#
This demo shows how to save and load dataObjects
to/from image formats as well as native itom formats.
from itom import dataObject
from itom import algorithms
from itom import rgba
from itom import plot
from itom import saveIDC
from itom import loadIDC
Create a colored dataObject of type rgba32
.
rgba32 = dataObject([100, 100], "rgba32")
Set all pixels to a gray value.
Therefore red=green=blue
with no transparency,
what means that alpha has to be set to the maximal value of 255
.
rgba32[0:100, 0:100] = rgba(150, 150, 150, 255)
"""insert a red, green and blue bar in the picture which are not complete intransparent"""
rgba32[10:30, :] = rgba(255, 0, 0, 150)
rgba32[50:70, :] = rgba(0, 255, 0, 150)
rgba32[80:100, :] = rgba(0, 0, 255, 150)
"""show the image"""
plot(rgba32)
(109, PlotItem(UiItem(class: Itom2dQwtPlot, name: plot0x0)))
Save the dataObject
as a *.tiff file with a rgba color palette.
algorithms.saveTiff(rgba32, "pic_rgba.tiff", "rgba")
Reload the picture as it was, that is of type rgba32
.
reload_tiff_rgba = dataObject()
algorithms.loadAnyImage(reload_tiff_rgba, "pic_rgba.tiff", "asIs")
Save the dataObject
as a *.tiff file with a rgb color palette,
which causes that the transparency of the bars will be ignored.
If gray
or gray16
is chosen as color palette the colored
dataObject
will be converted to a gray image
algorithms.saveTiff(rgba32, "pic_rgb.tiff", "rgb")
Reload the picture as it was, that is of type rgba32
with all alpha values set to 255
(no transparency).
reload_tiff_rgb = dataObject()
algorithms.loadAnyImage(reload_tiff_rgb, "pic_rgb.tiff", "asIs")
Save the dataObject
as a *.png file with a gray
color palette
(also gray16
and all colored palettes are supported).
algorithms.savePNG(rgba32, "pic_gray.png", "gray")
Reload the picture as it was, that is of type gray
(type uint8
)
reload_png_gray = dataObject()
algorithms.loadAnyImage(reload_png_gray, "pic_gray.png", "asIs")
Save the dataObject
as a *.pgm with a 16bit grayscale
(gray
and gray16
are only supported for gray images).
algorithms.savePGM(rgba32, "pic_gray.pgm", "gray16")
Load the *.pgm file as it was, that is of type gray
(type uint16
due to the 16bit gray color palette)
reload_pgm_gray16 = dataObject()
algorithms.loadAnyImage(reload_pgm_gray16, "pic_gray.pgm", "asIs")
Save the dataObject
as an *.idc file (itom data collection,
saved using Python module pickle
) therefore it must be wrapped into a dictionary
.
dataDict = {"data": rgba32}
saveIDC("pic_idc.idc", dataDict)
Load the *.idc file as it was, that is of type dictionary
.
loaded_dic = loadIDC("pic_idc.idc")
reload_img = loaded_dic["data"]
Copy the dataObject
rgba32_1 = rgba32
Save both (also more possible) in one *.idc file.
dic_1 = {"data_1": rgba32, "data_2": rgba32_1}
loaded_dic_1 = saveIDC("multi_pic_idc.idc", dic_1)
In this section a uint8
dataObject
is created and saved in false colors.
create a gray image of type uint8
uint8 = dataObject([100, 100], "uint8")
# insert blocks with values of 0.0, 1.0, 50 and 100
uint8[0:25, :] = 0
uint8[25:50, :] = 1
uint8[50:75, :] = 50
uint8[75:100, :] = 100
Save as *.tiff file colored in the hotIron
color palette.
Other palettes are for example grayMarked
or falseColor
.
algorithms.saveTiff(uint8, "pic_uint8.tiff", "hotIron")
This section shows how to save floating point dataObjects
as a image.
create a gray image of type float32
float32 = dataObject([100, 100], "float32")
# insert blocks with values of 0.0, 1.0, 50 and 100
float32[0:25, :] = 0.0
float32[25:50, :] = 1.0
float32[50:75, :] = 50.0
float32[75:100, :] = 100.0
Save the float32
dataObject
as a *.png file
with a falseColor
palette (here hotIron
is used,
others are for example grayMarked
or falseColor
).
If you save a dataObject
of type float the color palette is spaced between
[0, 1]
->all values above 1.0
will be clipped to the maximum value.
algorithms.savePNG(float32, "pic_falseColor.png", "hotIron")
Reload the saved *.png as a uint8
dataObject
->all steps with values above 1.0 have the same gray value.
reload_png_falseColor = dataObject()
algorithms.loadAnyImage(reload_png_falseColor, "pic_falseColor.png", "GRAY")
To get rid of the problem above you need to normalize your
dataObject
between 0.0
and 1.0
using the function normalize
.
normfloat32 = float32.normalize(0.0, 1.0, "float32")
algorithms.savePNG(normfloat32, "pic_normalized_falseColor.png", "hotIron")
Reload the image as a uint8
dataObject
->all steps are included.
reload_normalized_falseColor = dataObject()
algorithms.loadAnyImage(
reload_normalized_falseColor,
"pic_normalized_falseColor.png",
"GRAY",
)
Total running time of the script: (0 minutes 0.126 seconds)