Source code for slitflow.img.calc

import numpy as np
import pandas as pd
from ..tbl.table import Table, merge_different_index
from .. import setindex


[docs]class MaskArea(Table): """Calculate mask area by counting non-zero pixel number in an image. Args: reqs[0] (Image): Image stack to calculate area. Required param; ``length_unit``, ``pitch``. param["split_depth"] (int): File split depth number. Returns: Table: Area Table """
[docs] def set_index(self): """Copy index from the required data index.""" setindex.from_req(self, 0)
[docs] def set_info(self, param={}): """Copy index information from reqs[0] and add area column.""" self.info.copy_req(0) self.info.delete_column(keeps=self.info.get_column_name("index")) length_unit = self.info.get_param_value("length_unit") self.info.add_column( 0, "area", "float", length_unit + "^2", "Area size of mask image") self.info.set_split_depth(param["split_depth"])
[docs] @staticmethod def process(reqs, param): """Calculate mask area by counting non-zero pixel number in an image. Args: reqs[0] (numpy.ndarray): Image stack to calculate area. param["pitch"] (int): Length per pixel in length_unit. Returns: pandas.DataFrame: Area table """ img = reqs[0].copy() areas = [] for i in range(img.shape[0]): areas.append(np.count_nonzero(img[i, :, :])) return pd.DataFrame({"area": np.array(areas) * param["pitch"]**2})
[docs] def post_run(self): """Merge the index table to the split result data.""" merge_different_index(self, 0)