I have a problem that I can’t think about. I rotate the image with setparameters() function by 1 radian on the Z axis, and then calculate the mutual information value A between the graph and the fixed image. The mutual information value B between the Image without rotation and the fixed image ， the difference of mutual information is not large (less than 0.1). Why is this? The rotation error range of medical images should be ± 1 ° or ± 2 ° I think. Why does the mutual information value not change much after I rotate such a large angle?
This is readily done either via the
MetricEvaluate method or using the
Exhaustive optimizer with an observer that records the metric value for each of its evaluations. Please see this Jupyter notebook section titled “Register using sampling of the parameter space” and this Jupyter notebook where the exhaustive optimizer is used to plot the similarity metric terrain.
Thank you for your reply. I’m sorry I didn’t reply you the other day.
I calculate the mutual information value of Shannon entropy on the image. I believe you have seen it in another question I asked. I calculate it outside the framework. Will this lead to the above situation？（After adjusting the parameters, the similarity measure changes little.）
In addition, I checked the official documents of simpleitk, and found an index I didn’t pay attention to before, which is called “JointHistogramMutualInformation”. Is this the mutual information value of Shannon entropy?
Thank you again for your answer.
I believe both MattesMutualInformation and JointHistogramMutualInformation are computing the MI using Shannon’s definition of entropy, just in different ways. See those classes for documentation and even better if you looked at the source as that is what is actually happening. The values will vary every time if you are using a random sampling. If you use the whole image it will be more stable.
Hope this helps.
Although my most puzzling problem has not been solved, thank you for your help.
I want to ask about the axis. I hope you can have a look. Is the axis regulation of 3dslicer different from that of simpleitk? I draw a picture of what I understand. On the left is the axis of 3D slicer, and on the right is the axis of simpleitk. I don’t know if I drew it right?
Please see the Slicer documentation which discusses this in detail (SimpleITK and ITK use the same convention).