Skip to content
Snippets Groups Projects
Commit 8611f68b authored by Valentin Valls's avatar Valentin Valls
Browse files

Remove blank lines

parent affffa88
No related branches found
No related tags found
No related merge requests found
......@@ -19,13 +19,13 @@ import math
class OffsetsCalculation:
def __init__(self,resolution,imageDir,stand,borderType):
#monkey.patch_all(thread=False)
self.totalProcessingTime = 0
#self.sampleSizeX = sampleSize[0]
#self.sampleSizeY = sampleSize[1]
#self.sampleSizeZ = sampleSize[2]
......@@ -36,34 +36,34 @@ class OffsetsCalculation:
self.pathImg = '/users/muzelle/Desktop/success2/007_HA-300_6.5_NUS2__004_/007_HA-300_6.5_NUS2__004_0000.edf'
self.pathFlat = '/users/muzelle/Desktop/success2/007_HA-300_6.5_NUS2__004_/refHST0000.edf'
self.pathDark = '/users/muzelle/Desktop/success2/007_HA-300_6.5_NUS2__004_/dark.edf'
self.resolution = resolution
self.stand = stand
self.borderType = borderType
self.img = None
self.flat = None
self.dark = None
self.dispImg = None
self.intImg = None
self.centImgY = None
self.centImgX = None
self.centerY = None
self.centerX = None
self.leftBorder = None
self.rightBorder = None
self.borderDetected = "false"
def imagesOpening(self):
start = time.time()
self.img = fabio.open(self.pathImg)
......@@ -72,43 +72,43 @@ class OffsetsCalculation:
self.centImgY = int(self.img.data.shape[0]/2)
self.centImgX = int(self.img.data.shape[1]/2)
imagesOpeningTime = time.time()-start
self.totalProcessingTime += imagesOpeningTime
print("Time to open images: "+str(imagesOpeningTime))
def imageContrastEnhancement(self):
start = time.time()
filtImg = np.subtract(self.img.data,self.dark.data).astype(np.float32)
filtImgFlat = np.subtract(self.flat.data,self.dark.data).astype(np.float32)
corrImg = np.divide(filtImg,filtImgFlat).astype(np.float32)
corrImg[corrImg < 0] = 0
enhImg = cv2.normalize(corrImg, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
self.img = corrImg
imageContrastEnhancementTime = time.time()-start
self.totalProcessingTime += imageContrastEnhancementTime
print("Time to enhance image contrast: "+str(imageContrastEnhancementTime))
def imageFiltering(self):
start = time.time()
blurImg = cv2.bilateralFilter(self.img,9,75,75)
blurImg = cv2.normalize(blurImg, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
self.img = blurImg
self.dispImg = blurImg
imageFilteringTime = time.time()-start
self.totalProcessingTime += imageFilteringTime
print("Time to filter image: "+str(imageFilteringTime))
def edgesDetection(self):
start = time.time()
......@@ -122,13 +122,13 @@ class OffsetsCalculation:
thr = np.median(edges)*1.33
edges = np.uint8(edges < -thr)
#measures = cv2.connectedComponentsWithStats(edges, 8, cv2.CV_32S)
#labImg = measures[1]
#areas = measures[2][:,cv2.CC_STAT_AREA]
labImg = measure.label(edges, neighbors=8, background=0)
labImg += 1
......@@ -142,149 +142,149 @@ class OffsetsCalculation:
labImg = morphology.remove_small_objects(labImg,noise,in_place=True)
edges = np.uint8(labImg > 0)
#self.dispImg[edges > 0] = 0
#savedImg = fabio.edfimage.EdfImage()
#savedImg.data = self.dispImg
#savedImg.write('/segfs/tango/tmp/clemence/SampleAlignment/edgesDetected.edf')
self.img = labImg
edgesDetectionTime = time.time()-start
self.totalProcessingTime += edgesDetectionTime
print("Time to find edges: "+str(edgesDetectionTime))
def sampleCenterXCalculation(self):
start = time.time()
props = measure.regionprops(self.img,self.dispImg)
centroids = [(p.centroid[0],p.centroid[1]) for p in props if p.max_intensity > 200]
if len(centroids) != 0:
self.borderDetected = "true"
if self.stand == 'absent':
if self.borderType == 'straight':
self.leftBorder = np.min(centroids,axis=0)[1]
self.rightBorder = np.max(centroids,axis=0)[1]
self.centerX = int((self.rightBorder - self.leftBorder)/2+self.leftBorder)
if self.borderType == 'irregular':
edges = self.img > 0
self.leftBorder = np.min(centroids,axis=0)[1]
print('left border: '+str(self.leftBorder))
self.rightBorder = np.max(centroids,axis=0)[1]
print('right border: '+str(self.rightBorder))
self.centerX = int(np.mean([(np.min(np.where(edges[raw,:])[0])+np.max(np.where(edges[raw,:])[0]))/2
for raw in range(edges.shape[0])
if len(np.where(edges[raw,:])[0]) != 0
and (np.max(np.where(edges[raw,:])[0])-np.min(np.where(edges[raw,:])[0])) > 200]
))
if self.borderType == 'oblique':
edges = self.img > 0
areas = [p.area for p in props]
fullBorder = [p.label for p in props if p.area == np.max(areas)][0]
centerRawByRaw = np.array([((np.min(np.where(edges[raw,:])[0])+np.max(np.where(edges[raw,:])[0]))/2,raw)
for raw in range(edges.shape[0])
if len(np.where(edges[raw,:])[0]) != 0 and
(np.max(np.where(edges[raw,:])[0])-np.min(np.where(edges[raw,:])[0])) > 100])
meanCenter = np.median(centerRawByRaw,axis=0)
rows = np.where(self.img == fullBorder)[0]
cols = np.where(self.img == fullBorder)[1]
ya = np.mean(rows[np.where(cols == np.min(cols))])
yb = np.mean(rows[np.where(cols == np.max(cols))])
xb = np.max(cols)
xa = np.min(cols)
slope = (yb-ya)/(xb-xa)
self.centerX = (self.centImgY-meanCenter[1])/slope + meanCenter[0]
offsetSX = (self.centImgX-self.centerX)*self.resolution*10**-3
centerXCalculationTime = time.time()-start
self.totalProcessingTime += centerXCalculationTime
print("Time to calculate sample center X: "+str(centerXCalculationTime))
return offsetSX
def sampleCenterYCalculation(self):
pass
def localTomoCenterXCalculation(self):
start = time.time()
props = measure.regionprops(self.img,self.intImg)
areas = [p.area for p in props]
border = [p.centroid for p in props if p.area == np.max(areas) and p.max_intensity > 200]
if len(border) == 0:
offsetSX = self.img.shape[1]
else:
ret,binImg = cv2.threshold(self.dispImg,0,1,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
labImg = measure.label(binImg, neighbors=8, background=0)
labImg += 1
props = measure.regionprops(labImg)
areas = [p.area for p in props]
sample = [p.centroid for p in props if p.area == np.max(areas)][0]
if sample[1] > border[0][1]:
self.borderDetected = "right"
else:
self.borderDetected = "left"
self.centerX = border[0][1]
offsetSX = (self.centImgX-self.centerX)*self.resolution*10**-3
centerXCalculationTime = time.time()-start
self.totalProcessingTime += centerXCalculationTime
print("Time to calculate sample center X: "+str(centerXCalculationTime))
return offsetSX
def displayResults(self):
try:
self.centerX
except NameError:
......@@ -293,26 +293,26 @@ class OffsetsCalculation:
self.centerY
except NameError:
self.centerY = 0
print('\n')
print('total processing time: '+str(self.totalProcessingTime))
print('\n')
print('Sample center detected: '+str(self.centerX)+' in X and: '+str(self.centerY)+' in Y')
print('Image center: '+str(self.centImgX)+' in X and: '+str(self.centImgY)+' in Y')
def displayImage(self):
edgesDetection = fabio.open('/segfs/tango/tmp/clemence/SampleAlignment/edgesDetected.edf')
qapp = qt.QApplication([])
plot = Plot2D()
plot.addImage(edgesDetection.data, legend='image')
plot.show()
qapp.exec_()
if __name__ == '__main__':
test = OffsetsCalculation(12.57,"/segfs/tango/tmp/clemence/SampleAlignment/","absent","straight")
test.imagesOpening()
test.imageContrastEnhancement()
......@@ -323,5 +323,5 @@ if __name__ == '__main__':
#test.displayResults()
#inst = OffsetsCalculation(0,"","","")
#inst.displayImage()
......@@ -43,35 +43,35 @@ class TomoSampleAlign(Device):
"""
__metaclass__ = DeviceMeta
# PROTECTED REGION ID(TomoSampleAlign.class_variable) ENABLED START #
green_mode = PyTango.GreenMode.Gevent
#
# Blocking operation to find sample center
#
def alignment_task(self):
try:
self.info_stream("started alignment")
self.is_error = False
self.is_moving = True
# alignment code
print ("Alignment start\n")
#gevent.sleep(3)
align = OffsetsCalculation(self.attr_Resolution_read,self.attr_ImageDirectory_read,self.attr_StandDetection_read,self.attr_BorderType_read)
align.imagesOpening()
align.imageContrastEnhancement()
align.imageFiltering()
align.edgesDetection()
if self.attr_AlignX_read:
if self.attr_LocalTomo_read == True:
offsetSX = align.localTomoCenterXCalculation()
self.attr_BorderDetected_read = align.borderDetected
print(self.attr_BorderDetected_read)
else:
offsetSX = align.sampleCenterXCalculation()
......@@ -81,22 +81,22 @@ class TomoSampleAlign(Device):
offsetSY = align.sampleCenterYCalculation()
else:
offsetSY = 0
align.displayResults()
print('Offset detected: '+str(int(offsetSX/(self.attr_Resolution_read*10**-3)))+' in X and: '+str(int(offsetSY/(self.attr_Resolution_read*10**-3)))+' in Y')
print('Relative SY moving of '+str(offsetSX))
print('Relative SZ moving of '+str(offsetSY))
self.attr_AlignmentOffsets_read = [offsetSX,offsetSY]
self.is_moving = False
self.info_stream("\nfinished alignment")
# catch all exceptions, print the traceback to the console and
# add the information to the device status until acknowledgement
except:
......@@ -106,10 +106,10 @@ class TomoSampleAlign(Device):
except PyTango.DevFailed as ex:
self.task_error = ex
PyTango.Except.print_exception(ex)
self.is_error = True
self.is_moving = False
# PROTECTED REGION END # // TomoSampleAlign.class_variable
# ----------
......@@ -183,13 +183,13 @@ class TomoSampleAlign(Device):
Device.init_device(self)
# PROTECTED REGION ID(TomoSampleAlign.init_device) ENABLED START #
# init flags for state and status
self.is_moving = False
self.is_error = False
self.running_task = None
self.task_error = None
self.attr_SampleSizeZ_read = 0.0
self.attr_SampleSizeY_read = 0.0
self.attr_SampleSizeX_read = 0.0
......@@ -201,7 +201,7 @@ class TomoSampleAlign(Device):
self.attr_AlignY_read = False
self.attr_AlignmentOffsets_read = [0.0,0.0]
print("done!")
# PROTECTED REGION END # // TomoSampleAlign.init_device
def always_executed_hook(self):
......@@ -416,7 +416,7 @@ class TomoSampleAlign(Device):
_state = PyTango.DevState.MOVING
else:
_state = PyTango.DevState.ON
self.set_state(_state)
return _state
# PROTECTED REGION END # // TomoSampleAlign.State
......@@ -425,7 +425,7 @@ class TomoSampleAlign(Device):
def dev_status(self):
# PROTECTED REGION ID(TomoSampleAlign.Status) ENABLED START #
state = self.dev_state()
self._status = "The device state is "
if state == PyTango.DevState.FAULT:
self._status += "FAULT"
......@@ -444,7 +444,7 @@ class TomoSampleAlign(Device):
self._status += "MOVING"
else:
self._status += "ON"
self.set_status(self._status)
return self._status
# PROTECTED REGION END # // TomoSampleAlign.Status
......@@ -454,12 +454,12 @@ class TomoSampleAlign(Device):
@DebugIt()
def AlignSample(self):
# PROTECTED REGION ID(TomoSampleAlign.AlignSample) ENABLED START #
self.running_task = gevent.spawn(self.alignment_task)
print("Running started")
self.is_moving = True
# PROTECTED REGION END # // TomoSampleAlign.AlignSample
def is_AlignSample_allowed(self):
......@@ -474,10 +474,10 @@ class TomoSampleAlign(Device):
def main(args=None, **kwargs):
# PROTECTED REGION ID(TomoSampleAlign.main) ENABLED START #
# Enable gevents for the server
kwargs.setdefault("green_mode", PyTango.GreenMode.Gevent)
return run((TomoSampleAlign,), args=args, **kwargs)
# PROTECTED REGION END # // TomoSampleAlign.main
......
......@@ -110,7 +110,7 @@ class TomoSample(Device):
def init_device(self):
Device.init_device(self)
# PROTECTED REGION ID(TomoSample.init_device) ENABLED START #
self.attr_Name_read = "None"
self.attr_Position_read = "None"
self.attr_SizeX_read = 0.0
......@@ -120,13 +120,13 @@ class TomoSample(Device):
self.attr_AlignSY_read = 0.0
self.attr_AlignSZ_read = 0.0
self.attr_Aligned_read = False
#
# Get sample changer position from the device name
dev_name = self.get_name()
dom, fam, member = dev_name.split("/")
self.attr_Position_read = member
# PROTECTED REGION END # // TomoSample.init_device
def always_executed_hook(self):
......@@ -236,12 +236,12 @@ class TomoSample(Device):
@DebugIt()
def dev_state(self):
# PROTECTED REGION ID(TomoSample.State) ENABLED START #
if self.attr_Name_read == "None":
_state = PyTango.DevState.DISABLE
else:
_state = PyTango.DevState.ON
self.set_state(_state)
return _state
# PROTECTED REGION END # // TomoSample.State
......@@ -251,7 +251,7 @@ class TomoSample(Device):
@DebugIt()
def Reset(self):
# PROTECTED REGION ID(TomoSample.Reset) ENABLED START #
myself = PyTango.DeviceProxy (self.get_name())
myself.write_attribute_asynch("Name" , "None")
myself.write_attribute_asynch("SizeX" , 0)
......@@ -261,7 +261,7 @@ class TomoSample(Device):
myself.write_attribute_asynch("AlignSY" , 0)
myself.write_attribute_asynch("AlignSZ" , 0)
myself.write_attribute_asynch("Aligned" , False)
# PROTECTED REGION END # // TomoSample.Reset
# ----------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment