What criteria can be used to measure an image filtering algorithm?
I’m writing a paper related convolutional image processing, and I’m lacking criteria that can be used to measure an analyse my results. I’ve thought of it’s influence on image quality however I cannot seem to find any convincing equations or criteria for stuff like noise pollution or distortion etc.
Literally any help is much appreciated as I’m running low on time.
Image quality is a large field and can be somewhat nebulous because an improvement in one metric can directly cause a degradation in another metric. Like Nico S. commented, quality measurement is based on the application. A human user may care much more about accurate color than sharpness, while a machine vision algorithm may need minimal noise over accurate color.
Here is a great resource on image noise measurements and equations.
Here are some sharpness measurement techniques.
Here is a link to distortion measurement methods.
Don't just use the methods without reason though, figure out what is important to your application and why, then explain how your algorithm improves image quality in the specific areas that are important. Since you're working on filters, an example closer to your application might be how a Gaussian filter decreases noise. You can measure noise of an image before and after applying your filter. The tradeoff of a Gaussian filter is you lose sharpness since a Gaussian filter blurs your image. If the point of the paper is purely to provide analysis, you can present both quality metrics to show that it improves what you want it to improve, but it takes away quality from another area.
Here is one more link to other image quality factors you can explore. Good luck.
Related
I have a general question about contrast adjustment, forgive me if it is too naive or general and please let me know if any correction is necessary.
Here is my question: When do we usually do contrast adjustment or contrast stretching in image processing or computer vision? In particular, when is it necessary to do contrast adjustments for object detection or segmentation? What are the downfall of contrast stretching, if not applied in the right situation? Can you give me a few examples as well?
Your answers are greatly appreciated!I
In general, you can classify algorithms that are related to images and videos processing int two categories:
Image + video processing
Where these algorithms can be used to enhance the quality of the image.
Computer vision:
These algorithms can be used to detect, recognize and classify objects.
The contrast adjustment techniques used to enhance the quality and the visibility of the image.
Most of the time better input quality for computer vision algorithms can lead to better results. This is why most of cv algorithms use pre-processing steps to remove noise and improve the quality.
I have a hard problem to solve which is about automatic image keywording. You can assume that I have a database with 100000+ keyworded low quality jpeg images for training (low quality = low resolution about 300x300px + low compression ratio). Each image has about 40 mostly accurate keywords (data may contain slight "noise"). I can also extract some data on keyword correlations.
Given a color image and a keyword, I want to determine the probability that the keyword is related to this image.
I need a creative understandable solution which I could implement on my own in about a month or less (I plan to use python). What I found so far is machine learning, neural networks and genetic algorithms. I was also thinking about generating some kind of signatures for each keyword which I could then use to check against not yet seen images.
Crazy/novel ideas are appreciated as well if they are practicable. I'm also open to using other python libraries.
My current algorithm is extremely complex and computationally heavy. It suggests keywords instead of calculating probability and 50% of suggested keywords are not accurate.
Given the hard requirements of the application, only gross and brainless solutions can be proposed.
For every image, use some segmentation method and keep, say, the four largest segments. Distinguish one or two of them as being background (those extending to the image borders), and the others as foreground, or item of interest.
Characterize the segments in terms of dominant color (using a very rough classification based on color primaries), and in terms of shape (size relative to the image, circularity, number of holes, dominant orientation and a few others).
Then for every keyword you can build a classifier that decides if a given image has/hasn't this keyword. After training, the classifiers will tell you if the image has/hasn't the keyword(s). If you use a fuzzy classification, you get a "probability".
I'm looking for an algorithm (ideally a C/C++ implementation) that calculates perceived similarity between two images, taking into account psychovisual factors (e.g. that difference in chroma is not as bad as difference in brightness).
I have original image and multiple variations of it (256-color quantisations in my case) and I'd like algorithm to find which image a human would judge as the best one.
The best I've found so far is SSIM, but it doesn't "understand" dithering (error diffusion) and implementation uses linear RGB (I've fixed that by implementing my own).
Alternatively, it could be algorithm that preprocesses images for comparison with SSIM/PSNR/MSE or other typical algorithm.
Well. Can't you turn it into an online job with amazon's mechanical turk?
Or make a game of it like google image labeler? You can give extra points, or payment if people agree on their scores.
The reason is I think this job is just too difficult for a computer. SSIM can't score dithered images, and if you smooth the image, to make it work with SSIM, the dither pattern can't be part of the quality judgement, because it is no longer present in the image. And that pattern is probably relevant for image quality.
I'm currently working on algorithm for denoising images. I need to compare my algorithm with other, existing algorithms, but to do so I need a good quality measure.
The main goal for such measure is to be close to human perception skills. I know, that it is almost impossible, but there are good perceptual measures for audio signals. Are there any similar algorithms for images?
Right now I'm using simple measures, such as mean squared error (MSE), signal to noise ratio (SNR) etc...
And for your information, I'm currently implementing this in matlab
Have you check out SSIM (http://en.wikipedia.org/wiki/Structural_similarity) ? The following page (http://www.ece.uwaterloo.ca/~z70wang/research/ssim/) gives you a real example on how SSIM works compared to MSE.
I'm sure many people have already seen demos of using genetic algorithms to generate an image that matches a sample image. You start off with noise, and gradually it comes to resemble the target image more and more closely, until you have a more-or-less exact duplicate.
All of the examples I've seen, however, use a fairly straightforward pixel-by-pixel comparison, resulting in a fairly predictable 'fade in' of the final image. What I'm looking for is something more novel: A fitness measure that comes closer to what we see as 'similar' than the naive approach.
I don't have a specific result in mind - I'm just looking for something more 'interesting' than the default. Suggestions?
I assume you're talking about something like Roger Alsing's program.
I implemented a version of this, so I'm also interested in alternative fitness functions, though I'm coming at it from the perspective of improving performance rather than aesthetics. I expect there will always be some element of "fade-in" due to the nature of the evolutionary process (though tweaking the evolutionary operators may affect how this looks).
A pixel-by-pixel comparison can be expensive for anything but small images. For example, the 200x200 pixel image I use has 40,000 pixels. With three values per pixel (R, G and B), that's 120,000 values that have to be incorporated into the fitness calculation for a single image. In my implementation I scale the image down before doing the comparison so that there are fewer pixels. The trade-off is slightly reduced accuracy of the evolved image.
In investigating alternative fitness functions I came across some suggestions to use the YUV colour space instead of RGB since this is more closely aligned with human perception.
Another idea that I had was to compare only a randomly selected sample of pixels. I'm not sure how well this would work without trying it. Since the pixels compared would be different for each evaluation it would have the effect of maintaining diversity within the population.
Beyond that, you are in the realms of computer vision. I expect that these techniques, which rely on feature extraction, would be more expensive per image, but they may be faster overall if they result in fewer generations being required to achieve an acceptable result. You might want to investigate the PerceptualDiff library. Also, this page shows some Java code that can be used to compare images for similarity based on features rather than pixels.
A fitness measure that comes closer to what we see as 'similar' than the naive approach.
Implementing such a measure in software is definitely nontrivial. Google 'Human vision model', 'perceptual error metric' for some starting points. You can sidestep the issue - just present the candidate images to a human for selecting the best ones, although it might be a bit boring for the human.
I haven't seen such a demo (perhaps you could link one). But a couple proto-ideas from your desription that may trigger an interesting one:
Three different algorithms running in parallel, perhaps RGB or HSV.
Move, rotate, or otherwise change the target image slightly during the run.
Fitness based on contrast/value differences between pixels, but without knowing the actual colour.
...then "prime" a single pixel with the correct colour?
I would agree with other contributors that this is non-trivial. I'd also add that it would be very valuable commercially - for example, companies who wish to protect their visual IP would be extremely happy to be able to trawl the internet looking for similar images to their logos.
My naïve approach to this would be to train a pattern recognizer on a number of images, each generated from the target image with one or more transforms applied to it: e.g. rotated a few degrees either way; a translation a few pixels either way; different scales of the same image; various blurs and effects (convolution masks are good here). I would also add some randomness noise to the each of the images. The more samples the better.
The training can all be done off-line, so shouldn't cause a problem with runtime performance.
Once you've got a pattern recognizer trained, you can point it at the the GA population images, and get some scalar score out of the recognizers.
Personally, I like Radial Basis Networks. Quick to train. I'd start with far too many inputs, and whittle them down with principle component analysis (IIRC). The outputs could just be a similiarity measure and dissimilarity measure.
One last thing; whatever approach you go for - could you blog about it, publish the demo, whatever; let us know how you got on.