In [1]:
%matplotlib inline
In [2]:
import astra
import numpy as np
import pylab as plt
import os
import glob
import matplotlib
font = {'size' : 18}
matplotlib.rc('font', **font)
In [3]:
from scipy.signal import medfilt
In [4]:
def log_progress(sequence, every=None, size=None):
from ipywidgets import IntProgress, HTML, VBox
from IPython.display import display
is_iterator = False
if size is None:
try:
size = len(sequence)
except TypeError:
is_iterator = True
if size is not None:
if every is None:
if size <= 200:
every = 1
else:
every = size / 200 # every 0.5%
else:
assert every is not None, 'sequence is iterator, set every'
if is_iterator:
progress = IntProgress(min=0, max=1, value=1)
progress.bar_style = 'info'
else:
progress = IntProgress(min=0, max=size, value=0)
label = HTML()
box = VBox(children=[label, progress])
display(box)
index = 0
try:
for index, record in enumerate(sequence, 1):
if index == 1 or index % every == 0:
if is_iterator:
label.value = '{index} / ?'.format(index=index)
else:
progress.value = index
label.value = u'{index} / {size}'.format(
index=index,
size=size
)
yield record
except:
progress.bar_style = 'danger'
raise
else:
progress.bar_style = 'success'
progress.value = index
label.value = unicode(index or '?')
In [5]:
def images_diff(im1, im2):
assert(im1.shape==im2.shape)
rec_diff = np.zeros(shape=(im1.shape[0],im1.shape[1],3), dtype='float32')
im1_t = im1.copy()
im1_t = (im1_t-im1_t.min())/(im1_t.max()-im1_t.min())
im2_t = im2.copy()
im2_t = (im2_t-im2_t.min())/(im2_t.max()-im2_t.min())
# nrecon_rec_t[nrecon_rec_t<0] = 0
diff_rec = im1_t-im2_t
rec_diff[...,0] = diff_rec*(diff_rec>0)
rec_diff[...,1] = -diff_rec*(diff_rec<0)
rec_diff[...,2] = rec_diff[...,1]
return rec_diff
In [34]:
!ls /home/makov/diskmnt/big/yaivan/RC/MMC1_2.82um_/
In [7]:
!ls /home/makov/diskmnt/big/yaivan/MMC_1/_tmp/nrecon/bh_0_rc_0/
In [27]:
!ls '/home/makov/diskmnt/big/yaivan/Sand/Reconstructed/
In [8]:
def get_bh_level(nf):
return(int(os.path.split(nf)[-1].split('_')[1]))
def get_rc_level(nf):
return(int(os.path.split(nf)[-1].split('_')[3]))
In [42]:
def get_data(folder):
try:
data_file = glob.glob(os.path.join(folder, '*_sino*.tif'))[0]
# print(data_file)
sinogram = plt.imread(data_file).astype('float32')
data_file = glob.glob(os.path.join(folder, '*_sinoraw_*.tif'))[0]
sinraw = plt.imread(data_file).astype('float32')
rec_file = glob.glob(os.path.join(folder, '*_rec*.png'))[0]
rec = plt.imread(rec_file).astype('float32')
except e:
print 'folder'
raise e
return sinogram, sinraw, rec
In [55]:
objects = []
# objects.append({'name':'MMC_1',
# 'data_root':'/home/makov/diskmnt/big/yaivan/RC/MMC1_2.82um_/',
# 'rc_ref':16})
# objects.append({'name':'Sand',
# 'data_root':'/home/makov/diskmnt/big/yaivan/RC/Chieftain_Unc_2.8_/',
# 'rc_ref':20})
# objects.append({'name':'HP_Stage',
# 'data_root':'/home/makov/diskmnt/big/yaivan/RC/S2-Barnett@HP_P1_2.99um_/',
# 'rc_ref':20})
objects.append({'name':'Model object',
'data_root':'/home/makov/diskmnt/big/yaivan/RC/cube_/',
'rc_ref':0})
In [56]:
for rc_object in objects:# data_root = '/home/makov/diskmnt/big/yaivan/MMC_1/_tmp/nrecon/'
data_root= rc_object['data_root']
# nrecon_root_folder = os.path.join(data_root,'_tmp','nrecon')
nrecon_folders = glob.glob(os.path.join(data_root, 'bh_*_rc_*'))
nrecon_folders = [nf for nf in nrecon_folders if os.path.isdir(nf)]
print len(nrecon_folders)
for nf in nrecon_folders:
print get_rc_level(nf),
print
sino = {}
sinoraw = {}
rec ={}
for nf in log_progress(nrecon_folders):
rc_level = get_rc_level(nf)
sino[rc_level], sinoraw[rc_level], rec[rc_level] = get_data(nf)
h={}
for k, v in log_progress(list(rec.iteritems())):
r = rec[k]
h[k], _ = np.histogram(r,bins=1000)
x = []
y = []
for k,v in h.iteritems():
x.append(k)
y.append(np.sum(v**2))
plt.figure(figsize=(10,7))
plt.title('{} Reference RC:{}'.format(rc_object['name'],rc_object['rc_ref']))
plt.plot(x,y,'o')
plt.ylabel('Sum of hist^2')
plt.xlabel('RC')
plt.grid(True)
plt.show()
In [57]:
sino = {}
sinoraw = {}
rec ={}
for nf in log_progress(nrecon_folders):
rc_level = get_rc_level(nf)
sino[rc_level], sinoraw[rc_level], rec[rc_level] = get_data(nf)
In [44]:
h={}
for k, v in log_progress(list(rec.iteritems())):
r = rec[k]
h[k], _ = np.histogram(r,bins=1000)
In [45]:
x = []
y = []
for k,v in h.iteritems():
x.append(k)
y.append(np.sum(v**2))
In [47]:
plt.figure(figsize=(10,7))
plt.plot(x,y,'o')
plt.grid(True)
plt.show()
In [ ]: