Unwarping Fiducial using MOPS and bUnwarpJ - ArrayIndexOutOfBoundsException Error

Dear all,

I’m quite new to ImageJ(currently using fiji) and want to use it to process warped data.

For this, I took an image of a fiducial plate and used the plugin ‘bUnwarpJ’ to match it with the template. The results were not satisfying, so I tried to use the plugin ‘Extract MOPS correspondences’ for fetching landmarks, but it doesn’t seem to work with my images and I can’t figure out why.

The log says:

Processing MOPS …
took 1547ms.
1244 features extracted.
Processing MOPS …

but an ‘Exception’ window pops up, stating

(Fiji Is Just) ImageJ 2.0.0-rc-54/1.51g; Java 1.8.0_66 [64-bit]; Linux 3.16.0-4-amd64; 113MB of 2195MB (5%)


Naturally, I assumed that the image taken is too far off from the template, so I tried to get landmarks from the template and itself - with the same result.

I played around with the parameters quite a while and tried it on different computers, so my guess would be that the algorithm doesn’t work on periodic structures?
(I also tried the SIFT plugin, but it doesn’t give me enough landmarks - the resulting image still doesn’t match the template).

Can anyone confirm my guess, or knows what the error message is about?

Thank you!

1 Like

Here’s the template I use:

And that’s one of the images I want to match:

(original data in tif format)

I can reproduce the error on my Mac. I get the following exception:

(Fiji Is Just) ImageJ 2.0.0-rc-54/1.51g; Java 1.8.0_74 [64-bit]; Mac OS X 10.12.1; 725MB of 1596MB (45%)
java.lang.ArrayIndexOutOfBoundsException: 36
	at mpicbg.imagefeatures.FloatArray2DMOPS.processCandidate(FloatArray2DMOPS.java:337)
	at mpicbg.imagefeatures.FloatArray2DMOPS.runOctave(FloatArray2DMOPS.java:432)
	at mpicbg.imagefeatures.FloatArray2DMOPS.run(FloatArray2DMOPS.java:479)
	at mpicbg.imagefeatures.FloatArray2DMOPS.extractFeatures(FloatArray2DMOPS.java:758)
	at mpicbg.ij.MOPS.extractFeatures(MOPS.java:104)
	at MOPS_ExtractPointRoi.run(MOPS_ExtractPointRoi.java:231)
	at ij.IJ.runUserPlugIn(IJ.java:217)
	at ij.IJ.runPlugIn(IJ.java:181)
	at ij.Executer.runCommand(Executer.java:137)
	at ij.Executer.run(Executer.java:66)
	at java.lang.Thread.run(Thread.java:745)

It seems indeed like a special case not taken into account.

@axtimwalde, any ideas about it?

1 Like

Thank you for your reply, Ignacio! I couldn’t solve the problem, so in the end I did the landmark detection myself. Still curious about why it didn’t work using MOPS, though, so I will try to wrap my head around the theory of the algorithm once I get a day off.

(p.s.: it seems like the forum kicked out my example pictures in the second post, not sure why…)

@iarganda, @Feivel,

This looks a whole lot like a bug that was found and fixed awhile ago:

Not sure if the fix has been released and pulled into Fiji though.

It appears that there has not been a new release since this bugfix.

In the meantime, you may be able to “get around” the bug by choosing different values for the
minOctaveSize and maxOctaveSize parameters.