Commit b88b2585 authored by Andrey Filippov's avatar Andrey Filippov

updated for lwir16

parent d786da7b
......@@ -80,7 +80,7 @@ def get_tile_images(image, width=8, height=8):
#from libtiff import TIFF
'''
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:
.getstack(items=[])
returns np.array, layers are stacked along depth - think of RGB channels
......@@ -95,12 +95,10 @@ Examples:
'''
class imagej_tiff:
# imagej stores labels lengths in this tag
__TIFF_TAG_LABELS_LENGTHS = 50838
# imagej stores labels conents in this tag
__TIFF_TAG_LABELS_STRINGS = 50839
# init
def __init__(self,filename, layers = None, tile_list = None):
# file name
......@@ -133,10 +131,7 @@ class imagej_tiff:
tif.seek(i)
a = np.array(tif)
a = np.reshape(a,(a.shape[0],a.shape[1],1))
#a = a[:,:,np.newaxis]
# scale for 8-bits
# exclude layer named 'other'
if self.bpp==8:
_min = self.data_min
......@@ -151,9 +146,7 @@ class imagej_tiff:
a[a==0]=np.nan
a = a.astype(float)
if self.labels[i]!='other':
# a[a==0]=np.nan
a = (_max-_min)*(a-_MIN)/(_MAX-_MIN)+_min
# init
if i==0:
self.image = a
# stack along depth (think of RGB channels)
......@@ -171,11 +164,11 @@ class imagej_tiff:
indx += 1
else:
other_label = "other"
# print(tile_list)
# print(tile_list)
num_tiles = len(tile_list)
num_layers = len(layers)
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(
tif = tif,
tile_list=tile_list,
......@@ -187,7 +180,7 @@ class imagej_tiff:
for nt,tl in enumerate(tile_list):
ty = 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)])
#convert from int8
if self.bpp==8:
......@@ -213,10 +206,15 @@ class imagej_tiff:
self.target_disparity = tiles_other[...,0]
self.gt_ds = tiles_other[...,1:3]
pass
# 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
def getvalues(self,label=""):
l = self.getstack([label],shape_as_tiles=True)
......@@ -283,11 +281,8 @@ class imagej_tiff:
return res
# 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):
a = ()
if len(items)==0:
......@@ -301,17 +296,30 @@ class imagej_tiff:
a += (self.image[:,:,j],)
# stack along depth
b = np.stack(a,axis=2)
if shape_as_tiles:
b = get_tile_images(b,self.tileW,self.tileH)
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
# * do not handle out of bounds
def channel(self,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
def show_images(self,items=[]):
......@@ -332,7 +340,6 @@ class imagej_tiff:
# display single image
def show_image(self,index):
# display using matplotlib
t = self.image[:,:,index]
......@@ -359,7 +366,6 @@ class imagej_tiff:
infos = []
for info in self.infos:
infos.append(ET.fromstring(info))
self.infos = infos
# specifics
......@@ -372,16 +378,46 @@ class imagej_tiff:
pd[child.tag] = child.text
self.props = pd
# tiles are squares
file_version = float(self.props['VERSION'])
if (file_version < 2.0):
# tiles are squares (older version
self.tileW = int(self.props['tileWidth'])
self.tileH = int(self.props['tileWidth'])
self.data_min = float(self.props['data_min'])
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
def __split_labels(self,n,tag):
# list
tag_lens = tag[self.__TIFF_TAG_LABELS_LENGTHS]
# string
......@@ -405,21 +441,13 @@ class imagej_tiff:
skip -= 1
tag_labels = tag_labels[l:]
#MAIN
if __name__ == "__main__":
try:
fname = sys.argv[1]
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 = "1521849031_093189-ML_DATA-32B-O-OFFS1.0.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"
#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 = "/home/elphel/lwir16-proc/proc1/models/1626032208_613623/v01/ml32/1626032208_613623-ML-AUX-RND-DOFFS-5.000.tiff"
print(bcolors.BOLDWHITE+"time: "+str(time.time())+bcolors.ENDC)
ijt = imagej_tiff(fname)
......@@ -432,32 +460,28 @@ if __name__ == "__main__":
rough_string = ET.tostring(ijt.infos[0], "utf-8")
reparsed = minidom.parseString(rough_string)
print(reparsed.toprettyxml(indent="\t"))
#print(ijt.props)
# needed properties:
print("Tiles shape: "+str(ijt.tileW)+"x"+str(ijt.tileH))
try:
print("Data min: "+str(ijt.data_min))
print("Data max: "+str(ijt.data_max))
except:
print("Data min/max are not provided")
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']
# now split this into tiles:
#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))
exit (0)
#
# each tile's disparity:
print(bcolors.BOLDWHITE+"time: "+str(time.time())+bcolors.ENDC)
# provide layer name
values = ijt.getvalues(label='other')
print("Stack of values shape: "+str(values.shape))
# each tile's disparity:
fig = plt.figure()
fig.suptitle("Estimated Disparity")
plt.imshow(values[:,:,0])
......@@ -474,40 +498,6 @@ if __name__ == "__main__":
plt.colorbar()
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()
plt.show()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment