Changelog
0.6.10
Add support for Numpy 2.0 #278
Improve performance of function
attribute_extrema()
#273
0.6.8
Add support for Python 3.12 and remove Python 3.7 #272
Fix bug with empty graphs in function
bipartite_graph_matching()
for minimum cost matching in bipartite graphs #270Fix bug in function
ultrametric_open()
#268
0.6.7
Add function
is_bipartite_graph()
#265Add function
bipartite_graph_matching()
for minimum cost matching in bipartite graphs #265Add function
match_pixels_image_2d()
to compute the optimal matching between the pixels/contours of 2 images #265Add “similarity” mode in Dasgupta quality measure
dasgupta_cost()
#264Add
to_undirected_graph()
to the tree class #263Add option to use a preexisting graph in
graph_4_adjacency_2_khalimsky()
#262
0.6.6
Add support for Python 3.11 #261
Improve notebooks section of the doc and add new notebooks on 3D mesh processing: *Watershed on a mesh with IGL* and *Watershed on a mesh with Trimesh* #258
Fix unwanted behavior in
reconstruct_leaf_data()
#254Fix crash when creating an empty tree in Python #252
0.6.5
Add support for Python 3.10, remove support of Python 3.6 #243
Add an optional condition to the tree propagate and accumulate function see documentation Conditional sequential propagate and accumulate
propagate_sequential_and_accumulate()
#241
0.6.4
Add function to compute the line graph of a graph
line_graph()
#239Add function to extract a subtree from a tree
sub_tree()
#238Add new fast lowest common ancestor algorithm
lowest_common_ancestor_preprocess()
with \(O(n)\) time preprocessing and average \(O(1)\) time query (based on sparse table with blocks). The expected speedup is comprised between 1.2 and 1.8 compared to the previous method (parse table without block wich is still available). #237Add options to set a global thread number limit
set_num_threads()
#234
0.6.2
Add support for Python 3.9, remove support of Python 3.5 #233
0.6.1
Breaking changes
C++ only: the children relation of trees is not computed automatically anymore, a call to the member function
compute_children
is required before accessing to any children information of a tree, see documentation Children relation #228
Other changes
Function
bpt_canonical()
can now process a graph given as a edge list (arrays of source and target vertices) #230Add functions
sources()
andtargets()
to the classesUndirectedGraph
andTree
which will returns views whenever possible #230Add options for memory pre-allocation in
UndirectedGraph
constructor #232Improve performance of regular grid graphs #231
Improve memory usage of marginal accumulators #228
Remove the need of the children relation anymore of trees in several functions #228
Bugfix: Regular grid graph will now always fulfils the
CptGridGraph
concept #229
0.6.0
Breaking changes
The functions
filter_non_relevant_node_from_tree()
,filter_small_nodes_from_tree()
, andfilter_weak_frontier_nodes_from_tree()
now return canonized tree by default (old behaviour is obtained with the argumentcanonize_tree=False
) #221C++ only: the function
bpt_canonical
does not compute an explicit representation of the minimum spanning tree. The mst can still be reconstructed with the fieldmst_edge_map
in the result using the new functionsubgraph_spanning
f50ebc8C++ only: fields of the class
regular_graph
are now private with public const accessors #211
Other changes
Major Python classes (Trees, graphs, …) are now pickable #212 and #214
Python classes now support dynamic attributes and higra attributes are now stored directly in the objects dictionaries with a direct access as class members. #209 and #210
Function
bpt_canonical()
now supports: construction of the tree based on an arbitrary given ordering, avoid the explicit computation of the minimum spanning tree, multidimentional edge weights (with lexicographic sorting). The documentation has also been improved. #222Fast lowest ancestor computation is now better integrated to the
Tree
class. Callinglowest_common_ancestor_preprocess()
will now make any call tolowest_common_ancestor()
to use the pre-processing #216Add parallel sorting functions
sort()
andarg_sort()
(also support lexicographic ordering). #219Add function
subgraph()
to extract the subgraph induced by a set of edges from an undirected graph 4cfa9acFunctions for watershed hierarchies in Python can now return the non canonized tree (option
canonize_tree=False
) #220Function
canonize_hierarchy()
can now return thenode_map
which associates any node of the canonized tree to a node of the original tree. 5701d29Fix bug in
filter_small_nodes_from_tree()
when the base graph is a region adjacency graph #215
0.5.3
Fix bug in
watershed_hierarchy_by_attribute()
: on some conditions a large minima could be split in two or more regions. #205
0.5.2
Add function
tree_monotonic_regression()
: perform regression on a tree with an increasingness constraint #198Add attribute
attribute_moment_of_inertia()
: first Hu moment on hierarchies constructed on 2d pixel graphs. #197Add attribute
attribute_topological_height()
: number of edges on the longest path from a node to the leaf. #194Improve support for regular graphs: add functions
as_explicit_graph()
(convert an implicit graph to an explicit graph),mask_2_neighbours()
(create an neighbour list from an adjacency mask),get_nd_regular_graph()
andget_nd_regular_implicit_graph()
(create a regular implicit or explicit regular graph) #204Improve conversions functions between adjacency matrices and undirected graphs: improve functions
adjacency_matrix_2_undirected_graph()
andundirected_graph_2_adjacency_matrix()
(support for Scipy sparse matrix), andmake_graph_from_points()
(add symmetrization strategies). #201Improve documentation of
binary_partition_tree()
, fix typos in Trees, add section Troubleshooting. #199 #196Add altitudes increasingness assertions in several functions #193
Fix incorrect overload resolution in
as_explicit_graph()
when seeds are not of typenp.int64
#203Fix incorrect number of regions computation in fragmentation curves when ground-truth labels are not contiguous Hierarchy fragmentation curve #200
Fix
delinearize_vertex_weights()
not supporting Numpy arrays as shapes. #188Fix
save_tree()
incorrectly failing with no tree attributes. #181
0.5.1
Decrease ABI compatibility of linux wheels to 8 (G++ 4.9) #177
0.5.0
Breaking change
Removed overload of function
weight_graph()
taking a custom weighting function. An equivalent, and much efficient, behavior can be achieved be applying a vectorized function on the edge list (seeedge_list()
) 5914574Removed support for Python 3.4 #174
Other changes
Add support for Python 3.8 #174
Fix and add more efficient implementation of seeded watershed labelisation
labelisation_seeded_watershed()
#173Parallelize several algorithms with Intel TBB (parallel sort, hierarchy construction, fast LCA, graph weighting) #168 #169
Add support for Intel Threading Building Blocks (TBB), see usage in Installation #168 #175
Update third party libs #170
Fix agglomerative clustering when the input graph has duplicated edges Binary partition hierarchy #167
Fix missing overloads for unsigned types in
weight_graph()
#166Fix a bug in hierarchical watershed when leaves had non zero values Watershed hierarchy #165
0.4.5
Add new notebook: *Visualizing hierarchical image segmentations* #159
Add hierarchical cost function
tree_sampling_divergence()
#158Add attribute
attribute_tree_sampling_probability()
9faf740Add attribute
attribute_children_pair_sum_product()
0c6c958Improvements in documentation #157
Add hierarchy algorithm
component_tree_multivariate_tree_of_shapes_image2d()
#156Fix return policy in
parents()
, now returns a non writable reference e3eb5aaAdd option to deactivate immersion in tree of shapes 9efb6b6
Add algorithm
tree_fusion_depth_map()
11e4f53
0.4.4
Fix codecov incorrectly including third party libs #152
Add hierarchical cost
dasgupta_cost()
#151Add new attribute
attribute_child_number()
#149Fix bug in
simplify_tree()
#148 and #150Add argmin and argmax accumulators #146
Add new notebooks: PRL article illustrations and Astromical object detection with the Max-Tree #145 and #155
Update third party libs #141
0.4.2
Breaking change
Rename function attribute_mean_weights into
attribute_mean_vertex_weights()
#136
Other changes
Add SoftwareX illustrations notebook #140
Replace specialized C++ bindings for hierarchical watershed by a generic calls to
watershed_hierarchy_by_attribute()
#139Fix inconsistency between Python and C++ definitions of
attribute_volume()
#138Separate code and documentation on graph and tree attributes #137
Fix bug in
attribute_mean_vertex_weights()
#136
0.4.1
Add function
accumulate_on_contours()
. #134Better handling of null perimeter in
attribute_contour_strength()
. #133Add links to Python notebooks in the documentation. #132
Fix bug in
common_type()
support for bool type was missing. #131Fix bug in
attribute_contour_length()
with tree of shapes when interpolated are removed. #129
0.4.0
Breaking change
Refactor attributes related to perimeter: there is now a single homogeneous function
attribute_contour_length()
that replaces attribute_perimeter_length, attribute_perimeter_length_component_tree, and attribute_perimeter_length_partition_tree #121 and #124Add decorator
auto_cache()
for auto-caching of function results which replaces the decorator data_provider. #122 and #127
Other changes
Add a Cookiecutter project for c++ higra extension development Higra-cppextension-cookiecutter
Add more documentation for installation and compiling #123
Fix bug with integer data in
attribute_gaussian_region_weights_model()
#126Fix bug in graph associated to the
component_tree_tree_of_shapes_image2d()
#120Improve algorithm for
attribute_extrema()
#119Moved repository to higra Github organization #118
0.3.8
Add attributes:
attribute_height()
,attribute_extrema()
,attribute_extinction_value()
, andattribute_dynamics()
#110Fix tree category propagation #109
0.3.7
Hardening: add range checks in various Python bindings #107
Bundle
Higra
and third party libraries into pip wheel for easy C++ extension development:get_include()
,get_lib_include()
,get_lib_cmake()
#106Make
deleted_nodes
parameter ofreconstruct_leaf_data()
optional #105
0.3.6
Add
plot_graph
andplot_partition_tree()
#104Add
num_children()
overload that returns the number of children of every non leaf nodes #101
0.3.5
Breaking change
Rename
quasi_flat_zones_hierarchy
toquasi_flat_zone_hierarchy()
https://github.com/PerretB/Higra/commit/8aa95694fc7b8b59fd61ffe264943586e935a686
Other changes
Add
exponential-linkage
for agglomerative clusteringbinary_partition_tree_exponential_linkage()
https://github.com/PerretB/Higra/commit/a523d8cc484576907e356113dde23adf832eb13bAdd
canonize_hierarchy()
https://github.com/PerretB/Higra/commit/9a2c8d9e103fc3444f733e0c5a83b2bd775fdea8
0.3.4
Add
filter_non_relevant_node_from_tree()
,filter_small_nodes_from_tree()
, andfilter_weak_frontier_nodes_from_tree()
https://github.com/PerretB/Higra/commit/521f2416b9b649ace76168728c6d5c06edfde8c6Add
labelisation_horizontal_cut_from_num_regions()
https://github.com/PerretB/Higra/commit/cb9cc0d6ebeaa97f76c60ae1b879f2bfb777c01bAdd
at_least
andat_most
parameters forhorizontal_cut_from_num_regions()
https://github.com/PerretB/Higra/commit/7b5d00422562840de93df9fcef247b27a2d7365dOptimize Horizontal cut explorer construction https://github.com/PerretB/Higra/commit/68128b9f0201360888d7409dad397ceba23b100d
Add
child()
overload that returns the i-th child of every non leaf nodes https://github.com/PerretB/Higra/commit/6d47a21e942debfdebb633d6e7b7de88238c30ba
0.3.3
Add
accumulate_at()
https://github.com/PerretB/Higra/commit/4dadfad522aa6f8d59fa185507a0941c6fc0d0b0Add
altitude_correction
parameter to Ward linkagebinary_partition_tree_ward_linkage()
https://github.com/PerretB/Higra/commit/196386fe7e96aa9c8d97dd269b40ca022bb5dfbbMake
edge_weights
parameter ofundirected_graph_2_adjacency_matrix()
optional https://github.com/PerretB/Higra/commit/ca195a9d26ef7eaeb24afc7df5db9b90ba8e5ee7
0.3.2
Add
dendrogram_purity()
https://github.com/PerretB/Higra/commit/fb84d6fbc908d2bc1971cf6fc840f3da8c23c5bbAdd
random_binary_partition_tree()
https://github.com/PerretB/Higra/commit/46ff1e54d65b658c8d90682761fd77606b764e3cFix altitudes increasingness in Ward linkage
binary_partition_tree_ward_linkage()
https://github.com/PerretB/Higra/commit/82ba29f940a85c328df76bf9642cfc85f0b94dc7
0.3.1
Code cleanup #95
Add Ward linkage
binary_partition_tree_ward_linkage()
#94Add
make_lca_fast()
for fast lca result caching #93
0.3.0
Breaking change
Refactor Python concepts #88
Other changes
Fix bug with
saliency()
working on rags #92Fix bug in wheels generation (test result were ignored) #90
Fix bug in
linearize_vertex_weights()
#89Update
xtensor
#86Add
attribute_perimeter_length_component_tree()
#84Add Tree of shapes
component_tree_tree_of_shapes_image2d()
#82