Running multiple optimizers in parallell, and getting them to "speak" to eachother

Hi all,

One problem I want to address lies for example in the following cases:

  • I have one large reference image, and two images that I want to register to the reference image. The two images needs to have the same scale, and represent different “regions” of the reference image. So the two registration should happen in parallel, with the scale parameter being equal at each step for the two optimizers
  • Again, one reference, and several registration, but because the change of image 1 position can influence the metric of image2, the registration have to happen one step at a time, like this: optimizer1 step 0, optimizer2 step 0, optimizer1 step 1, optimizer2 step 1, optimizer1 step 2, optimizer2 step 2, …

Do you have any idea on if/how I could get these kind of registration working in itk ?

Thanks a lot for any help!

1 Like

If these two regions are “rigidly” registered, you might use a single optimizer and provide custom registration metric, which simply computes metric for both regions and returns metric sum to the optimizer.

If they are not rigidly connected, how do they influence each other?

You can also observe iteration events of optimizers, and have that as synchronization point.

Thanks for your answers @dzenanz!

For my first point, I have one reference image, lets say a human. Then I have 2 other image, one of the head, one of the body, that I want to register to the reference image. I know these images have the same scale, and the registration is only meaningful if the scaling parameter is always equal for those two image. Basically, the best would be be a single optimizer, with one reference image, two transforms scale been constant, two images to register. So I would need a custom metric and transform, right ? Is there some documentation, or starting point on how to write such metric ?

For my second point, I have a mesh. Each point in the mesh can move independently, but they influence each other, similarly to an active contour model. For this the observers idea seems fully appropriate. How would you set up a synchronization points for optimizers ? Do I need different thread ?

Thanks again for you time !