Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose ImageComparer API #1129

Open
antonfirsov opened this issue Feb 26, 2020 · 7 comments
Open

Expose ImageComparer API #1129

antonfirsov opened this issue Feb 26, 2020 · 7 comments

Comments

@antonfirsov
Copy link
Member

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?

@johanbenschop
Copy link

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.

@antonfirsov
Copy link
Member Author

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! 👍

@atruskie
Copy link
Contributor

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:

  • return gray if pixels are equal
  • return Black if top is less than bottom
  • otherwise return White

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:

Actual

TestNoAADrawLineDiagonalMultiplePoints_actual

Delta

TestNoAADrawLineDiagonalMultiplePoints_delta

Expected

TestNoAADrawLineDiagonalMultiplePoints_expected

@JimBobSquarePants JimBobSquarePants added this to the Future milestone Apr 24, 2020
@brickman1444
Copy link

brickman1444 commented Jun 20, 2021

I'd also be interested in this feature. I maintain an application that composes images like this using ImageSharp.
image

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.

@bkolo
Copy link

bkolo commented Sep 22, 2022

how about the ability to fingerprint image for a large library of images to identify similar images using a stored hash in a database

@antonfirsov
Copy link
Member Author

antonfirsov commented Sep 22, 2022

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.

@JimBobSquarePants
Copy link
Member

@coenm wrote a library for hashing years ago.

https://www.nuget.org/packages/CoenM.ImageSharp.ImageHash

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants