I am having trouble running the spark SIFT client and getting matches because it assumes i want to do normalizeForMatching, and normalizeForMatching assumes simply removing the last transform in the transform list will bring the tile back to something where putting x,y at 0,0 will bring the image into view. This is true if all you have a lens correction and a single transformation to bring it into the world, but in the case of longer lists of transforms this is not true. In particular I happen to have 4 transformations after using trakem2 to
not sure what the fix is... a few options i can think of to brainstorm.
-
make normalizeForMatching an option so those who don't want it can skip it. (seems like a bad solution given the need for evenly sized tiles is certain matchers). Incidentally i don't see how this solution guarantees consistently sized tiles if the lens corrections are sufficiently different.
-
give some options to hardcode the size of the tile to cutout, understanding that the user needs to make it large enough to cover the transformed tile given its current transformed location into the world.
-
completely rewrite the point match service to calculate and express matches in the original dataspace, meaning pre-transformed data space of the original mipmaplevel 0 image, not this sort of partially transformed standard that currently exists.
(i realize that this is a major change...I don't see how you can really maintain meaningful matches across transformation sets any other way, and if matches are tied to a particular transformation set, than that relationship should be made explicit and tracked rather than ad hoc).
-
If the goal of normalization is to bring the tile back to this "original" state, but with only lens correction included, than the tilespec schema could be extended to more explicitly call out that this transformation (or set of transformations) as special/pre-alignment/raw-correction or something, and other transformations are not... and then the normalizeForMatching code should use this distinction to remove all the non special/pre-alignment/raw-correction type transformations. Could be as easy as adding a flag to the transform class of, is-raw or not.
-
do not assume that you can shift the origin to 0,0 after removing the transforms that you did.. instead dynamically calculate the bounding box after you remove the transformations that you have. This is I think the easiest fix i can think of.
I think I like 4 the best, but 5 would also be ok...
thoughts?
I am having trouble running the spark SIFT client and getting matches because it assumes i want to do normalizeForMatching, and normalizeForMatching assumes simply removing the last transform in the transform list will bring the tile back to something where putting x,y at 0,0 will bring the image into view. This is true if all you have a lens correction and a single transformation to bring it into the world, but in the case of longer lists of transforms this is not true. In particular I happen to have 4 transformations after using trakem2 to
not sure what the fix is... a few options i can think of to brainstorm.
make normalizeForMatching an option so those who don't want it can skip it. (seems like a bad solution given the need for evenly sized tiles is certain matchers). Incidentally i don't see how this solution guarantees consistently sized tiles if the lens corrections are sufficiently different.
give some options to hardcode the size of the tile to cutout, understanding that the user needs to make it large enough to cover the transformed tile given its current transformed location into the world.
completely rewrite the point match service to calculate and express matches in the original dataspace, meaning pre-transformed data space of the original mipmaplevel 0 image, not this sort of partially transformed standard that currently exists.
(i realize that this is a major change...I don't see how you can really maintain meaningful matches across transformation sets any other way, and if matches are tied to a particular transformation set, than that relationship should be made explicit and tracked rather than ad hoc).
If the goal of normalization is to bring the tile back to this "original" state, but with only lens correction included, than the tilespec schema could be extended to more explicitly call out that this transformation (or set of transformations) as special/pre-alignment/raw-correction or something, and other transformations are not... and then the normalizeForMatching code should use this distinction to remove all the non special/pre-alignment/raw-correction type transformations. Could be as easy as adding a flag to the transform class of, is-raw or not.
do not assume that you can shift the origin to 0,0 after removing the transforms that you did.. instead dynamically calculate the bounding box after you remove the transformations that you have. This is I think the easiest fix i can think of.
I think I like 4 the best, but 5 would also be ok...
thoughts?