Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
python3-imagej-tiff
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Elphel
python3-imagej-tiff
Commits
b88b2585
Commit
b88b2585
authored
Dec 21, 2021
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated for lwir16
parent
d786da7b
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
423 additions
and
433 deletions
+423
-433
imagej_tiff.py
imagej_tiff.py
+423
-433
No files found.
imagej_tiff.py
View file @
b88b2585
...
@@ -80,7 +80,7 @@ def get_tile_images(image, width=8, height=8):
...
@@ -80,7 +80,7 @@ def get_tile_images(image, width=8, height=8):
#from libtiff import TIFF
#from libtiff import TIFF
'''
'''
Description:
Description:
Reads
a tiff
files with multiple layers that were saved by imagej
Reads
TIFF
files with multiple layers that were saved by imagej
Methods:
Methods:
.getstack(items=[])
.getstack(items=[])
returns np.array, layers are stacked along depth - think of RGB channels
returns np.array, layers are stacked along depth - think of RGB channels
...
@@ -95,12 +95,10 @@ Examples:
...
@@ -95,12 +95,10 @@ Examples:
'''
'''
class
imagej_tiff
:
class
imagej_tiff
:
# imagej stores labels lengths in this tag
# imagej stores labels lengths in this tag
__TIFF_TAG_LABELS_LENGTHS
=
50838
__TIFF_TAG_LABELS_LENGTHS
=
50838
# imagej stores labels conents in this tag
# imagej stores labels conents in this tag
__TIFF_TAG_LABELS_STRINGS
=
50839
__TIFF_TAG_LABELS_STRINGS
=
50839
# init
# init
def
__init__
(
self
,
filename
,
layers
=
None
,
tile_list
=
None
):
def
__init__
(
self
,
filename
,
layers
=
None
,
tile_list
=
None
):
# file name
# file name
...
@@ -133,10 +131,7 @@ class imagej_tiff:
...
@@ -133,10 +131,7 @@ class imagej_tiff:
tif
.
seek
(
i
)
tif
.
seek
(
i
)
a
=
np
.
array
(
tif
)
a
=
np
.
array
(
tif
)
a
=
np
.
reshape
(
a
,(
a
.
shape
[
0
],
a
.
shape
[
1
],
1
))
a
=
np
.
reshape
(
a
,(
a
.
shape
[
0
],
a
.
shape
[
1
],
1
))
#a = a[:,:,np.newaxis]
#a = a[:,:,np.newaxis]
# scale for 8-bits
# exclude layer named 'other'
# exclude layer named 'other'
if
self
.
bpp
==
8
:
if
self
.
bpp
==
8
:
_min
=
self
.
data_min
_min
=
self
.
data_min
...
@@ -151,9 +146,7 @@ class imagej_tiff:
...
@@ -151,9 +146,7 @@ class imagej_tiff:
a
[
a
==
0
]
=
np
.
nan
a
[
a
==
0
]
=
np
.
nan
a
=
a
.
astype
(
float
)
a
=
a
.
astype
(
float
)
if
self
.
labels
[
i
]
!=
'other'
:
if
self
.
labels
[
i
]
!=
'other'
:
# a[a==0]=np.nan
a
=
(
_max
-
_min
)
*
(
a
-
_MIN
)
/
(
_MAX
-
_MIN
)
+
_min
a
=
(
_max
-
_min
)
*
(
a
-
_MIN
)
/
(
_MAX
-
_MIN
)
+
_min
# init
if
i
==
0
:
if
i
==
0
:
self
.
image
=
a
self
.
image
=
a
# stack along depth (think of RGB channels)
# stack along depth (think of RGB channels)
...
@@ -171,11 +164,11 @@ class imagej_tiff:
...
@@ -171,11 +164,11 @@ class imagej_tiff:
indx
+=
1
indx
+=
1
else
:
else
:
other_label
=
"other"
other_label
=
"other"
# print(tile_list)
# print(tile_list)
num_tiles
=
len
(
tile_list
)
num_tiles
=
len
(
tile_list
)
num_layers
=
len
(
layers
)
num_layers
=
len
(
layers
)
tiles_corr
=
np
.
empty
((
num_tiles
,
num_layers
,
self
.
tileH
*
self
.
tileW
),
dtype
=
float
)
tiles_corr
=
np
.
empty
((
num_tiles
,
num_layers
,
self
.
tileH
*
self
.
tileW
),
dtype
=
float
)
# tiles_other=np.empty((num_tiles,3),dtype=float)
# tiles_other=np.empty((num_tiles,3),dtype=float)
tiles_other
=
self
.
gettilesvalues
(
tiles_other
=
self
.
gettilesvalues
(
tif
=
tif
,
tif
=
tif
,
tile_list
=
tile_list
,
tile_list
=
tile_list
,
...
@@ -187,7 +180,7 @@ class imagej_tiff:
...
@@ -187,7 +180,7 @@ class imagej_tiff:
for
nt
,
tl
in
enumerate
(
tile_list
):
for
nt
,
tl
in
enumerate
(
tile_list
):
ty
=
tl
//
tilesX
ty
=
tl
//
tilesX
tx
=
tl
%
tilesX
tx
=
tl
%
tilesX
# tiles_corr[nt,nl] = np.ravel(layer[self.tileH*ty:self.tileH*(ty+1),self.tileW*tx:self.tileW*(tx+1)])
# tiles_corr[nt,nl] = np.ravel(layer[self.tileH*ty:self.tileH*(ty+1),self.tileW*tx:self.tileW*(tx+1)])
a
=
np
.
ravel
(
layer
[
self
.
tileH
*
ty
:
self
.
tileH
*
(
ty
+
1
),
self
.
tileW
*
tx
:
self
.
tileW
*
(
tx
+
1
)])
a
=
np
.
ravel
(
layer
[
self
.
tileH
*
ty
:
self
.
tileH
*
(
ty
+
1
),
self
.
tileW
*
tx
:
self
.
tileW
*
(
tx
+
1
)])
#convert from int8
#convert from int8
if
self
.
bpp
==
8
:
if
self
.
bpp
==
8
:
...
@@ -213,10 +206,15 @@ class imagej_tiff:
...
@@ -213,10 +206,15 @@ class imagej_tiff:
self
.
target_disparity
=
tiles_other
[
...
,
0
]
self
.
target_disparity
=
tiles_other
[
...
,
0
]
self
.
gt_ds
=
tiles_other
[
...
,
1
:
3
]
self
.
gt_ds
=
tiles_other
[
...
,
1
:
3
]
pass
pass
# init done, close the image
# init done, close the image
tif
.
close
()
if
(
self
.
props
[
'VERSION'
]
==
2.0
):
# self.tileH = self.image.shape[0]//self.props['tileStepY']
# self.tileW = self.image.shape[1]//self.props['tileStepX']
self
.
tileH
=
self
.
props
[
'tileStepY'
]
self
.
tileW
=
self
.
props
[
'tileStepX'
]
pass
tif
.
close
()
# label == tiff layer name
# label == tiff layer name
def
getvalues
(
self
,
label
=
""
):
def
getvalues
(
self
,
label
=
""
):
l
=
self
.
getstack
([
label
],
shape_as_tiles
=
True
)
l
=
self
.
getstack
([
label
],
shape_as_tiles
=
True
)
...
@@ -283,11 +281,8 @@ class imagej_tiff:
...
@@ -283,11 +281,8 @@ class imagej_tiff:
return
res
return
res
# get ordered stack of images by provided items
# get ordered stack of images by provided items
# by index or label name
# by index or label name. Divides into [self.tileH][self.tileW] tiles
def
getstack
(
self
,
items
=
[],
shape_as_tiles
=
False
):
def
getstack
(
self
,
items
=
[],
shape_as_tiles
=
False
):
a
=
()
a
=
()
if
len
(
items
)
==
0
:
if
len
(
items
)
==
0
:
...
@@ -301,17 +296,30 @@ class imagej_tiff:
...
@@ -301,17 +296,30 @@ class imagej_tiff:
a
+=
(
self
.
image
[:,:,
j
],)
a
+=
(
self
.
image
[:,:,
j
],)
# stack along depth
# stack along depth
b
=
np
.
stack
(
a
,
axis
=
2
)
b
=
np
.
stack
(
a
,
axis
=
2
)
if
shape_as_tiles
:
if
shape_as_tiles
:
b
=
get_tile_images
(
b
,
self
.
tileW
,
self
.
tileH
)
b
=
get_tile_images
(
b
,
self
.
tileW
,
self
.
tileH
)
return
b
return
b
def
trimStack
(
self
,
stack
,
radius
=
0
):
if
(
radius
==
0
):
radius
=
self
.
props
[
'corrRadius'
]
corr_side
=
2
*
radius
+
1
return
stack
[:,:,:,:
corr_side
,:
corr_side
]
# get np.array of a channel
# get np.array of a channel
# * do not handle out of bounds
# * do not handle out of bounds
def
channel
(
self
,
index
):
def
channel
(
self
,
index
):
return
self
.
image
[:,:,
index
]
return
self
.
image
[:,:,
index
]
def
getCorrsMeta
(
self
,
items
=
[]):
stack0
=
self
.
getstack
(
items
,
shape_as_tiles
=
True
)
stack
=
np
.
moveaxis
(
stack0
,
4
,
0
)
# slices - first index
radius
=
self
.
props
[
'corrRadius'
]
num_meta
=
self
.
props
[
'numMeta'
]
corr_side
=
2
*
radius
+
1
corr_tiles
=
stack
[:,:,:,:
corr_side
,:
corr_side
]
meta
=
stack
[:,:,:,
-
1
,:
num_meta
]
return
corr_tiles
,
meta
/
self
.
props
[
'tileMetaScale'
]
# display images by index or label
# display images by index or label
def
show_images
(
self
,
items
=
[]):
def
show_images
(
self
,
items
=
[]):
...
@@ -332,7 +340,6 @@ class imagej_tiff:
...
@@ -332,7 +340,6 @@ class imagej_tiff:
# display single image
# display single image
def
show_image
(
self
,
index
):
def
show_image
(
self
,
index
):
# display using matplotlib
# display using matplotlib
t
=
self
.
image
[:,:,
index
]
t
=
self
.
image
[:,:,
index
]
...
@@ -359,7 +366,6 @@ class imagej_tiff:
...
@@ -359,7 +366,6 @@ class imagej_tiff:
infos
=
[]
infos
=
[]
for
info
in
self
.
infos
:
for
info
in
self
.
infos
:
infos
.
append
(
ET
.
fromstring
(
info
))
infos
.
append
(
ET
.
fromstring
(
info
))
self
.
infos
=
infos
self
.
infos
=
infos
# specifics
# specifics
...
@@ -372,16 +378,46 @@ class imagej_tiff:
...
@@ -372,16 +378,46 @@ class imagej_tiff:
pd
[
child
.
tag
]
=
child
.
text
pd
[
child
.
tag
]
=
child
.
text
self
.
props
=
pd
self
.
props
=
pd
file_version
=
float
(
self
.
props
[
'VERSION'
])
# tiles are squares
if
(
file_version
<
2.0
):
# tiles are squares (older version
self
.
tileW
=
int
(
self
.
props
[
'tileWidth'
])
self
.
tileW
=
int
(
self
.
props
[
'tileWidth'
])
self
.
tileH
=
int
(
self
.
props
[
'tileWidth'
])
self
.
tileH
=
int
(
self
.
props
[
'tileWidth'
])
self
.
data_min
=
float
(
self
.
props
[
'data_min'
])
self
.
data_min
=
float
(
self
.
props
[
'data_min'
])
self
.
data_max
=
float
(
self
.
props
[
'data_max'
])
self
.
data_max
=
float
(
self
.
props
[
'data_max'
])
else
:
floats
=
[
'dispOffsetLow'
,
'tileMetaScale'
,
'disparity_low'
,
'dispOffset'
,
'fatZero'
,
'disparity_pwr'
,
'VERSION'
,
'dispOffsetHigh'
,
'disparity_high'
]
ints
=
[
'metaGTConfidence'
,
'tileMetaSlice'
,
'indexReference'
,
'metaLastDiff'
,
'metaGTDisparity'
,
'metaFracValid'
,
'numScenes'
,
'metaTargetDisparity'
,
'disparity_steps'
,
'tileStepX'
,
'tileStepY'
,
"corrRadius"
,
"numMeta"
]
bools
=
[
'randomize_offsets'
]
for
key
in
pd
:
val
=
pd
[
key
]
if
key
in
bools
:
if
(
val
==
'1'
)
or
(
val
==
'true'
)
or
(
val
==
'True'
):
pd
[
key
]
=
1
else
:
pd
[
key
]
=
0
pass
elif
key
in
ints
:
pd
[
key
]
=
int
(
pd
[
key
])
elif
key
in
floats
:
pd
[
key
]
=
float
(
pd
[
key
])
try
:
pd
[
'corrRadius'
]
=
pd
[
'corrRadius'
]
# not yet exists
except
:
pd
[
'corrRadius'
]
=
7
try
:
pd
[
'numMeta'
]
=
pd
[
'numMeta'
]
# not yet exists
except
:
pd
[
'numMeta'
]
=
6
pass
# makes arrays of labels (strings) and unparsed xml infos
# makes arrays of labels (strings) and unparsed xml infos
def
__split_labels
(
self
,
n
,
tag
):
def
__split_labels
(
self
,
n
,
tag
):
# list
# list
tag_lens
=
tag
[
self
.
__TIFF_TAG_LABELS_LENGTHS
]
tag_lens
=
tag
[
self
.
__TIFF_TAG_LABELS_LENGTHS
]
# string
# string
...
@@ -405,21 +441,13 @@ class imagej_tiff:
...
@@ -405,21 +441,13 @@ class imagej_tiff:
skip
-=
1
skip
-=
1
tag_labels
=
tag_labels
[
l
:]
tag_labels
=
tag_labels
[
l
:]
#MAIN
#MAIN
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
try
:
try
:
fname
=
sys
.
argv
[
1
]
fname
=
sys
.
argv
[
1
]
except
IndexError
:
except
IndexError
:
fname
=
"/mnt/dde6f983-d149-435e-b4a2-88749245cc6c/home/eyesis/x3d_data/data_sets/train/1527182807_896892/v02/ml/1527182807_896892-ML_DATA-08B-O-FZ0.05-OFFS0.40000.tiff"
#fname = "/mnt/dde6f983-d149-435e-b4a2-88749245cc6c/home/eyesis/x3d_data/data_sets/train/1527182807_896892/v02/ml/1527182807_896892-ML_DATA-08B-O-FZ0.05-OFFS0.40000.tiff"
# fname = "1521849031_093189-ML_DATA-32B-O-OFFS1.0.tiff"
fname
=
"/home/elphel/lwir16-proc/proc1/models/1626032208_613623/v01/ml32/1626032208_613623-ML-AUX-RND-DOFFS-5.000.tiff"
# fname = "1521849031_093189-ML_DATA-08B-O-OFFS1.0.tiff"
#fname = "1521849031_093189-DISP_MAP-D0.0-46.tif"
#fname = "1526905735_662795-ML_DATA-08B-AIOTD-OFFS2.0.tiff"
#fname = "test.tiff"
print
(
bcolors
.
BOLDWHITE
+
"time: "
+
str
(
time
.
time
())
+
bcolors
.
ENDC
)
print
(
bcolors
.
BOLDWHITE
+
"time: "
+
str
(
time
.
time
())
+
bcolors
.
ENDC
)
ijt
=
imagej_tiff
(
fname
)
ijt
=
imagej_tiff
(
fname
)
...
@@ -432,32 +460,28 @@ if __name__ == "__main__":
...
@@ -432,32 +460,28 @@ if __name__ == "__main__":
rough_string
=
ET
.
tostring
(
ijt
.
infos
[
0
],
"utf-8"
)
rough_string
=
ET
.
tostring
(
ijt
.
infos
[
0
],
"utf-8"
)
reparsed
=
minidom
.
parseString
(
rough_string
)
reparsed
=
minidom
.
parseString
(
rough_string
)
print
(
reparsed
.
toprettyxml
(
indent
=
"
\t
"
))
print
(
reparsed
.
toprettyxml
(
indent
=
"
\t
"
))
#print(ijt.props)
# needed properties:
# needed properties:
print
(
"Tiles shape: "
+
str
(
ijt
.
tileW
)
+
"x"
+
str
(
ijt
.
tileH
))
print
(
"Tiles shape: "
+
str
(
ijt
.
tileW
)
+
"x"
+
str
(
ijt
.
tileH
))
try
:
print
(
"Data min: "
+
str
(
ijt
.
data_min
))
print
(
"Data min: "
+
str
(
ijt
.
data_min
))
print
(
"Data max: "
+
str
(
ijt
.
data_max
))
print
(
"Data max: "
+
str
(
ijt
.
data_max
))
except
:
print
(
"Data min/max are not provided"
)
print
(
ijt
.
image
.
shape
)
print
(
ijt
.
image
.
shape
)
# tiles,tiles_meta = ijt.getCorrsMeta(['0-1','1-2','2-3','3-4'])
tiles
,
tiles_meta
=
ijt
.
getCorrsMeta
([])
print
(
"Corr stack shape: "
+
str
(
tiles
.
shape
))
print
(
"Meta stack shape: "
+
str
(
tiles_meta
.
shape
))
# layer order: ['diagm-pair', 'diago-pair', 'hor-pairs', 'vert-pairs', 'other']
exit
(
0
)
# now split this into tiles:
#
# each tile's disparity:
#tiles = get_tile_images(ijt.image,ijt.tileW,ijt.tileH)
#print(tiles.shape)
tiles
=
ijt
.
getstack
([
'diagm-pair'
,
'diago-pair'
,
'hor-pairs'
,
'vert-pairs'
],
shape_as_tiles
=
True
)
print
(
"Stack of images shape: "
+
str
(
tiles
.
shape
))
print
(
bcolors
.
BOLDWHITE
+
"time: "
+
str
(
time
.
time
())
+
bcolors
.
ENDC
)
# provide layer name
# provide layer name
values
=
ijt
.
getvalues
(
label
=
'other'
)
values
=
ijt
.
getvalues
(
label
=
'other'
)
print
(
"Stack of values shape: "
+
str
(
values
.
shape
))
print
(
"Stack of values shape: "
+
str
(
values
.
shape
))
# each tile's disparity:
fig
=
plt
.
figure
()
fig
=
plt
.
figure
()
fig
.
suptitle
(
"Estimated Disparity"
)
fig
.
suptitle
(
"Estimated Disparity"
)
plt
.
imshow
(
values
[:,:,
0
])
plt
.
imshow
(
values
[:,:,
0
])
...
@@ -474,40 +498,6 @@ if __name__ == "__main__":
...
@@ -474,40 +498,6 @@ if __name__ == "__main__":
plt
.
colorbar
()
plt
.
colorbar
()
print
(
bcolors
.
BOLDWHITE
+
"time: "
+
str
(
time
.
time
())
+
bcolors
.
ENDC
)
print
(
bcolors
.
BOLDWHITE
+
"time: "
+
str
(
time
.
time
())
+
bcolors
.
ENDC
)
#print(values)
#print(value_tiles[131,162].flatten())
#print(np.ravel(value_tiles[131,162]))
#values = np.empty((vt.shape[0],vt.shape[1],3))
#for i in range(values.shape[0]):
# for j in range(values.shape[1]):
# values[i,j,0] = get_v1()
#print(tiles[121,160,:,:,0].shape)
#_nrows = int(ijt.image.shape[0] / ijt.tileH)
#_ncols = int(ijt.image.shape[1] / ijt.tileW)
#_nrows = 32
#_ncols = 32
#print(str(_nrows)+" "+str(_ncols))
#fig, ax = plt.subplots(nrows=_nrows, ncols=_ncols)
#for i in range(_nrows):
# for j in range(_ncols):
# ax[i,j].imshow(tiles[i+100,j,:,:,0])
# ax[i,j].set_axis_off()
#for i in range(5):
# fig = plt.figure()
# plt.imshow(tiles[121,160,:,:,i])
# plt.colorbar()
#ijt.show_images(['other'])
#ijt.show_images([0,3])
#ijt.show_images(['X-corr','Y-corr'])
#ijt.show_images(['R-vign',3])
ijt
.
show_images
()
ijt
.
show_images
()
plt
.
show
()
plt
.
show
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment