Skip to content

2D Demo fails with scipy V1.7

Thanks for a great package!

Small note, I tried running the demo code to get all 2D feautres form the RGB image with scipy v1.7.3 but it fails:

Code

from skimage import io, morphology, draw
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt

img2 = io.imread('./weee1.png')/255.

# transform to grayscale
img_gray2 = np.max(img2, axis=2)

# segment with thresholding
threshold = 0.1 # you may adjust here depending on the actual image
bw_org2 = img_gray2 > threshold
min_size = 300 # you may adjust here depending on the actual image
bw_smallobjects_removed = morphology.remove_small_objects(bw_org2, min_size=min_size)

area_threshold = 300 # you may adjust here depending on the actual image
bw_smallholes_filled = morphology.remove_small_holes(bw_smallobjects_removed, area_threshold=area_threshold)

bw2 = bw_smallholes_filled

spatial_resolution_xy=0.2860548271752086
df = imea.shape_measurements_2d(bw2, spatial_resolution_xy)

Error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [17], in <cell line: 24>()
     21 bw2 = bw_smallholes_filled
     23 spatial_resolution_xy=0.2860548271752086
---> 24 df = imea.shape_measurements_2d(bw2, spatial_resolution_xy)

File ~/anaconda3/lib/python3.9/site-packages/imea/extract.py:155, in shape_measurements_2d(bw, spatial_resolution_xy, dalpha, return_statistical_lengths, return_all_chords)
    151 bw_single = np.zeros_like(bw)
    152 bw_single[labels == i] = True
    154 shape_measurements_i, statistical_lengths_i, \
--> 155     all_chords_i = _shape_measurements_2d_single_object(bw_single,
    156                                                         spatial_resolution_xy,
    157                                                         dalpha)
    159 df_2d.append(shape_measurements_i)
    160 statistical_lengths.append(statistical_lengths_i)

File ~/anaconda3/lib/python3.9/site-packages/imea/extract.py:305, in _shape_measurements_2d_single_object(bw, spatial_resolution_xy, dalpha)
    299 # Statistical lengths
    300 feret_diameters, martin_diameters, nassenstein_diameters, maxchords, allchords,\
    301     measured_angles = measure_2d.statistical_length.compute_statistical_lengths(
    302         bw_cropped, daplha=dalpha)
    304 feret_max, feret_min, feret_median, feret_mean, \
--> 305     feret_mode, feret_std = measure_2d.statistical_length.distribution_parameters(
    306         feret_diameters)
    308 martin_max, martin_min, martin_median, martin_mean, \
    309     martin_mode, martin_std = measure_2d.statistical_length.distribution_parameters(
    310         martin_diameters)
    312 nassenstein_max, nassenstein_min, nassenstein_median, nassenstein_mean, \
    313     nassenstein_mode, nassenstein_std = measure_2d.statistical_length.distribution_parameters(
    314         nassenstein_diameters)

File ~/anaconda3/lib/python3.9/site-packages/imea/measure_2d/statistical_length.py:465, in distribution_parameters(distribution)
    463 median_value = np.median(distribution)
    464 mean_value = np.mean(distribution)
--> 465 mode, _ = stats.mode(distribution, axis=None, keepdims=False)
    466 std = np.std(distribution)
    468 return max_value, min_value, median_value, mean_value, mode, std

TypeError: mode() got an unexpected keyword argument 'keepdims'

It works with scipy v1.10.1 so it might be worth adding this as a requirement.

Alan.