Open antonfirsov opened 4 years ago
I would be very interested in this feature. What I'm currently looking for is the ability to compare a known good image with one that was just generated in a unit test and look whether they're the same or at least close enough. I would prefer a percentage of how much difference there is (like a summary of what PixelDifference is now).
A difference image would be useful to see what changed I suppose, but I don't quite see how this is would work inside a test.
You can call differnceImage.Save(...)
to save it for manual analysis. In our test infrastructure we have a .DebugSave(...)
extension method to save images to a dedicated artifact folder locally which is super useful, even without the difference image. On CI that method is a NOP.
Since our backlog is full of high priority topics (both big and small), I can't promise that this API will become a thing anytime soon. Feel free to borrow our code until then, and thanks for the feedback! 👍
I would be interested in this. I have had long had my own functions to do this and suffice to say, they are not that great.
RE difference image, I did a similar thing. I made a "DeltaImageProcesser" which my image comparer method uses. It is not a true difference image, but I've found it be diagnostically more useful, especially for very small differences. It boils down to:
The code is here if anyone is interested: https://github.com/QutEcoacoustics/audio-analysis/blob/b3741577a39a4a8982472a4ebcdecf8e227849a7/src/Acoustics.Shared/ImageSharp/DeltaPixelBlender.cs#L55-L64
Here is an example output:
I'd also be interested in this feature. I maintain an application that composes images like this using ImageSharp.
I have some tests covering the process end to end to make sure nothing breaks during refactors but I had to write the comparison myself and dial down the tolerance because I don't think I wrote it correctly.
how about the ability to fingerprint image for a large library of images to identify similar images using a stored hash in a database
ImageComparer intends to define a numeric similarity metric to measure difference between two images, it's primary use-case is testing.
Image fingerprinting / hashing is a related, but different feature. If this is something you are seriously interested in and you can give us ideas with specific algorithms or examples from other projects in mind, I recommend opening an Idea Discussion providing as much info and context as you can.
@coenm wrote a library for hashing years ago.
The image comparison logic implemented in
TolerantImageComparer
might be interesting for users, eg. for testing purposes.We should expose a similar feature from the core library.
The current
ImageComparer
API returns a list of detected pixel differences, which did not turn out to be useful. Shouldn't we return a difference image instead? Or should we return both?