# Is it possible to compute 2D Hessian value for each slice in a 3D medical array?

**URL:** https://discourse.itk.org/t/is-it-possible-to-compute-2d-hessian-value-for-each-slice-in-a-3d-medical-array/4565
**Category:** Beginner Questions
**Tags:** itk, python, simpleitk
**Created:** [November 10, 2021, 8:52am UTC](https://discourse.itk.org/t/is-it-possible-to-compute-2d-hessian-value-for-each-slice-in-a-3d-medical-array/4565 "2021-11-10T08:52:27Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![Fivethousand](https://discourse.itk.org/letter_avatar_proxy/v4/letter/f/cab0a1/32.png) [@Fivethousand](https://discourse.itk.org/u/Fivethousand)
#### Post date: [November 10, 2021, 8:52am UTC](https://discourse.itk.org/t/is-it-possible-to-compute-2d-hessian-value-for-each-slice-in-a-3d-medical-array/4565/1 "2021-11-10T08:52:27Z")

</div>

Hi, I am trying to compute 2-dimention hessian value for each slice in a 3D array. I succeed computing 3D hessian value for a 3D image or 2D hessian value for a single slice by using itk.MultiScaleHessianBasedMeasureImageFilter. But is it possible to perform Hessian Augmentation simultaneously for all the slices in a 3D array? I know I could achieve it by writing a for-loop, which is, however, very time-consuming. Thank you for your replies.

Here is how I compute 2D hessian value

```python
def hessian2D(array2d):
    print(" *****Hessian-vessel starts！*****")
    start_time = time()
    dimention = len(array2d.shape)
    img_itk = itk.GetImageFromArray(array2d)

    # 1
    sigma_minimum = 0.2
    sigma_maximum = 1 # 3.
    number_of_sigma_steps = 8
    ImageType = type(img_itk)
    Dimension = img_itk.GetImageDimension()
    HessianPixelType = itk.SymmetricSecondRankTensor[itk.D, Dimension]
    HessianImageType = itk.Image[HessianPixelType, Dimension]
    objectness_filter = itk.HessianToObjectnessMeasureImageFilter[HessianImageType, ImageType].New()
    objectness_filter.SetBrightObject(True)
    objectness_filter.SetScaleObjectnessMeasure(True)
    objectness_filter.SetAlpha(0.5)
    objectness_filter.SetBeta(1.0)
    objectness_filter.SetGamma(5.0)
    multi_scale_filter = itk.MultiScaleHessianBasedMeasureImageFilter[ImageType, HessianImageType, ImageType].New()
    multi_scale_filter.SetInput(img_itk)
    multi_scale_filter.SetHessianToMeasureFilter(objectness_filter)
    multi_scale_filter.SetSigmaStepMethodToLogarithmic()
    multi_scale_filter.SetSigmaMinimum(sigma_minimum)
    multi_scale_filter.SetSigmaMaximum(sigma_maximum)
    multi_scale_filter.SetNumberOfSigmaSteps(number_of_sigma_steps)
    output = multi_scale_filter.GetOutput()
    output_array = itk.GetArrayFromImage(output)
    end_time = time()
    print("Hessian-vessel finished, duration:{}s".format(end_time - start_time))
    return output_array

```

---

<div class="post-metadata">

### Author: ![zivy](https://discourse.itk.org/user_avatar/discourse.itk.org/zivy/32/1726_2.png) [@zivy](https://discourse.itk.org/u/zivy)
#### Post date: [November 10, 2021, 2:25pm UTC](https://discourse.itk.org/t/is-it-possible-to-compute-2d-hessian-value-for-each-slice-in-a-3d-medical-array/4565/2 "2021-11-10T14:25:56Z")

</div>

Hello @Fivethousand,

Possibly look at the [SliceBySliceFilter](https://itk.org/Doxygen/html/classitk_1_1SliceBySliceImageFilter.html). I’m not sure it is available in ITK’s Python wrapping but likely. The `MultiScaleHessianBasedMeasureImageFilter` is not available in SimpleITK.

Finally you can always use [Python multiprocessing](https://docs.python.org/3/library/multiprocessing.html) to work on multiple slices in parallel.

---

<div class="post-metadata">

### Author: ![Fivethousand](https://discourse.itk.org/letter_avatar_proxy/v4/letter/f/cab0a1/32.png) [@Fivethousand](https://discourse.itk.org/u/Fivethousand)
#### Post date: [November 11, 2021, 2:12pm UTC](https://discourse.itk.org/t/is-it-possible-to-compute-2d-hessian-value-for-each-slice-in-a-3d-medical-array/4565/3 "2021-11-11T14:12:41Z")

</div>

Thank you for your reply, I just notice that most of time is used in C compilation when initializing the

**MultiScaleHessianBasedMeasureImageFilter**. And the time of iterating each slice could be totally ignored.
