Source code for pyfibre.addons.shg_pl_trans.metric_analysers
import pandas as pd
from pyfibre.model.analysers.metric_analyser import MetricAnalyser
from pyfibre.model.tools.metrics import angle_analysis
from pyfibre.utilities import flatten_list
[docs]class SHGMetricAnalyser(MetricAnalyser):
[docs] def analyse(self):
# Analyse fibre networks
network_metrics = self._get_network_metrics()
# Analyse fibre segments
segment_metrics = self._get_segment_metrics(
'SHG', 'fibre_segments.npy')
# Average linear properties over all regions
global_segment_metrics = self._global_averaging(
segment_metrics, 'Fibre', 'SHG', 'Fibre Segment Area')
global_network_metrics = self._global_averaging(
network_metrics, 'Fibre', 'SHG')
# Overwrite a couple of metrics to calculate the sum
# for the image, rather than the mean
global_network_metrics['No. Fibres'] = sum(
network_metrics['No. Fibres'])
global_segment_metrics['Fibre Segment Coverage'] = sum(
segment_metrics['Fibre Segment Area'] / self.image.size)
fibre_angles = flatten_list([
[fibre.angle for fibre in fibre_network.fibres]
for fibre_network in self.networks
])
global_network_metrics['Fibre Angle SDI'], _ = angle_analysis(
fibre_angles)
global_metrics = pd.concat(
(global_segment_metrics,
global_network_metrics), axis=0)
return segment_metrics, network_metrics, global_metrics
[docs]class PLMetricAnalyser(MetricAnalyser):
[docs] def analyse(self):
# Analyse individual cell regions
segment_metrics = self._get_segment_metrics(
'PL', 'cell_segment.npy')
# Average linear properties over all regions
global_metrics = self._global_averaging(
segment_metrics, 'Cell', 'PL', 'Cell Segment Area')
global_metrics['No. Cells'] = len(self.segments)
global_metrics['Cell Segment Coverage'] = sum(
segment_metrics['Cell Segment Area'] / self.image.size)
return segment_metrics, global_metrics