Merging overlapping images into a single image by correctly positioning the patches one on the other
I would try:

make ordered list of all feature points from all images once.
so create a list where hash of feature or the feature alone is stored, and also info from which image it was taken and maybe even position. Then sort this list by the hash (or on the fly).
as a feature select what ever you use for comparing images now. As you have no scaling or rotation you do not need scale and rotation invariant features however if you use those it would not hurt. I usually chose pixels which are local maximum or minimum of intensity. And then compute histogram of pixels up to some constant distance from it (which is invariant on rotation) Then hash the histogram...

go through the list

check if one hash is in the list more than once but from different images
in ordered list they would be grouped together

if yes compare/merge those images to which the features belong
also update feature list so just change image id in the list to the new merged one.


If I see it right You current approach is O(m*n^2) and this would be O((n*m)*log(n*m)) where n is number of images and m is avg number of features per image.
Given many patches that are taken from an image, the task is creating a single image that is composed of the patches.
I have tried the naive solution:

for every 2 images, go over many patches and compare.
If they are similar above some confidence threshold, create a new image of the 2.
Add the new image to the pool and remove the other 2.
repeat until the pool is of size 1.

The problem is that this solution is very slow, and the main bottleneck is the patch comparing.
Is there a better way of doing that which is faster?
Maybe a better patch selection and comparison method?