|
1 | 1 | """ Module with implemenation of measure methods"""
|
2 |
| - |
| 2 | +import numpy |
3 | 3 | import itertools
|
4 | 4 | import skimage.measure as skimage_measure
|
5 | 5 |
|
@@ -53,22 +53,37 @@ def skimage_props_blk(block, lsetkey, labelkey):
|
53 | 53 | -------
|
54 | 54 | listprops : list of properties
|
55 | 55 | """
|
56 |
| - |
57 | 56 | block[labelkey][:, :, :] = skimage_measure.label(block[lsetkey] >= 0)
|
58 | 57 |
|
59 |
| - listprops = skimage_measure.regionprops(block[labelkey].astype(int)) |
| 58 | + shape, deltas, corners = [list(), list(), list()] |
60 | 59 |
|
61 |
| - # proplist = ["area", "centroid", "equivalent_diameter_area"] |
62 |
| - # proplist = ["area"] |
| 60 | + for idim, nblocks in enumerate([block.nzb, block.nyb, block.nxb]): |
| 61 | + if nblocks == 1: |
| 62 | + continue |
| 63 | + else: |
| 64 | + shape.append(nblocks) |
| 65 | + deltas.append([block.dz, block.dy, block.dx][idim]) |
| 66 | + corners.append([block.zmin, block.ymin, block.xmin][idim]) |
63 | 67 |
|
64 |
| - listprops = [ |
65 |
| - { |
66 |
| - "area": props["area"] * block.dx * block.dy * block.dz, |
67 |
| - "centroid": props["centroid"], |
68 |
| - } |
69 |
| - for props in listprops |
70 |
| - ] |
| 68 | + listprops = skimage_measure.regionprops( |
| 69 | + numpy.reshape(block[labelkey], shape).astype(int) |
| 70 | + ) |
| 71 | + ndim = len(shape) |
71 | 72 |
|
72 |
| - # listprops = [{key: props[key] for key in proplist} for props in listprops] |
| 73 | + modified_props = list() |
| 74 | + for props in listprops: |
73 | 75 |
|
74 |
| - return listprops |
| 76 | + modified_dict = dict() |
| 77 | + |
| 78 | + modified_dict["area"] = props["area"] * numpy.prod(deltas) |
| 79 | + modified_dict["centroid"] = [ |
| 80 | + corners[idim] + deltas[idim] * props["centroid"][idim] |
| 81 | + for idim in range(ndim) |
| 82 | + ] |
| 83 | + |
| 84 | + if ndim == 2: |
| 85 | + modified_dict["perimeter"] = props["perimeter"] * deltas[0] |
| 86 | + |
| 87 | + modified_props.append(modified_dict) |
| 88 | + |
| 89 | + return modified_props |
0 commit comments