I've been looking for an algorithm for a while to examine photos to get their "real" resolution, both to compress my personal collection better, and to provide a relatively rigorous demonstration of when a "12 megapixel photo" is "really" a 2MP photo due to the camera as a whole not being able to support it. I wonder if this could be the basis for what I'm looking for.
Naive idea: do a downscale-upscale roundtrip using bilinear interpolation and then compare that with the original. Any difference should be the added value over the lower res. This diff image would contain noise and signal though, the final score should increase with the signal noise ratio.
For compressing your personal collection, you are probably best off doing a parameter search with a desired max/average error. Too many variables in image quality to do anything based on signal chain alone, probably.
As fare as a rigorous demonstration goes, that's what resolution targets are for :)
this is intended to find the native resolution of upscaled anime, but maybe the getnative tool or the fourier approach can help pointing at the original resolution of a blown up photograph.
RAW usually compresses, just not as well as lossy. For example, the lossless FLIF image format usually compresses images quite well (and it's lossless - you can binary compare the before and roundtrip images to check).
For video, I suspect there's things like FLIF, but with interframe knowledge, allowing even more compression.
None of these should beat good lossy codecs, but they vastly outperform completely uncompressed data for the stuff people normally capture.
If you somehow capture true random noise, then these wont' work. But most recordings of interest are much more structured, hence compressible.
Not really. Some RAWs from some cameras do compress, but not others. (Not sure why; maybe it's already pre-compressed.) As an example, I tried just compressing a random 30MB RAW from my camera (just a photo of jeans, nothing particularly unusual) with 7z on Ultra compression, and it saved—guess what—a whopping 2.2% of its size.
The RAW format is probably using e.g zlib for compression internally. You can check by calculating how many bytes in total a truly raw image is: 12-16 bits (1.5-2 byte) per pixel.
7z is a generic lossless compressor. These algorithms tend to specialize in exact repeating patterns in sequences. Good for english prose, but images tend to have non-exact patterns in two dimension. A dedicated algorithm like FLIF will be much better at picking those up. I would expect an order of magnitude difference in performance between 7z and FLIF.
For the curious: the way these non-exact pattern compressors work is by subtracting out the predicted pattern and then storing the remaining signal, which will be smaller numbers and therefore take less bits to store.
Some RAW formats are pre-compressed, usually with very simple (hence fast) algorithms, and some aren't even lossless (Sony ARW). It's often possible to further compress them with specialized tools.
I doubt it. The method they are using makes a bunch of implicit assumptions about the content of the image. Microscope images generally are very sparse and have lots of black areas which makes this method work very well on them. At the very least, you may have to adapt some of the parameters (like dt in max finder) to work for photographs.
What about programmatically determining the resolving power or clarity of an optical component such as a lens or filter while in-place on a camera assembly? This often varies across different parts of the component due to design, dirt, damage, manufacturing issues, etc.
Wow, I have casually looked for a tool to get the real resolution of a captured image for years. The best I could do is the comparing the max distance away from a target(checker board or April tag).
If I were trying to solve this problem, I would Fourier transform and look to see at what spatial frequency the signal stops being larger than photon shot noise. Seems like the obvious first attempt at an approach.
But that's not what they're doing - they're doing something about "image partial phase autocorrelation", which are all words I know but not together. I wonder why the naive method isn't adequate.
The usual approach is to assume that those that have dedicated a good chunk of their life to a problem have tried the obvious. Aka as the 'why don't you' fallacy.
It's a good approach to entering a new field, and sometimes (rarely) it actually gets results. But the normal situation is that those in the know have thought of, tried and probably reject all the approaches that a newcomer would come up with in the first 10 minutes.
I'm not implying my obvious approach is better and that anyone is stupid for not doing it instead. People downvoting me for implying that are not being charitable.
On the contrary, the fact that they did not use it is good evidence that it is inadequate, given they spent a long time on the problem and I'm sure simpler solutions occurred to them. So I'm agreeing with you here. I'm just expressing interest it knowing why it isn't adequate.
Though for what it's worth I do work a lot with image processing (of trapped atoms though, not biological samples), so my first thoughts are also coming from someone who's spent a decent chunk of time considering these things.
25 comments
[ 511 ms ] story [ 2596 ms ] threadThe open source plugin for the image analysis algorithm with is here: https://github.com/Ades91/ImDecorr
As fare as a rigorous demonstration goes, that's what resolution targets are for :)
https://github.com/Infiziert90/getnative
https://ddl.kageru.moe/kbz12.pdf
Anyone have any suggestions for doing the same thing for video?
For video, I suspect there's things like FLIF, but with interframe knowledge, allowing even more compression.
None of these should beat good lossy codecs, but they vastly outperform completely uncompressed data for the stuff people normally capture.
If you somehow capture true random noise, then these wont' work. But most recordings of interest are much more structured, hence compressible.
https://flif.info/
For the curious: the way these non-exact pattern compressors work is by subtracting out the predicted pattern and then storing the remaining signal, which will be smaller numbers and therefore take less bits to store.
Also image compressors like FLIF vastly outperform general compressors on images.
Disclosure: I'm the author of PackRAW, a tool that does exactly that (https://encode.su/threads/2762-PackRAW)
But that's not what they're doing - they're doing something about "image partial phase autocorrelation", which are all words I know but not together. I wonder why the naive method isn't adequate.
It's a good approach to entering a new field, and sometimes (rarely) it actually gets results. But the normal situation is that those in the know have thought of, tried and probably reject all the approaches that a newcomer would come up with in the first 10 minutes.
On the contrary, the fact that they did not use it is good evidence that it is inadequate, given they spent a long time on the problem and I'm sure simpler solutions occurred to them. So I'm agreeing with you here. I'm just expressing interest it knowing why it isn't adequate.
Though for what it's worth I do work a lot with image processing (of trapped atoms though, not biological samples), so my first thoughts are also coming from someone who's spent a decent chunk of time considering these things.