4 ms·
It's difficult to effectively use cv libraries (such as opencv) because in order to approach new problems, understanding of the underlying theory and methodolog
by wyc 13y ago
It's difficult to effectively use cv libraries (such as opencv) because in order to approach new problems, understanding of the underlying theory and methodology is often necessary. Example code can only go so far to teach the user how to evaluate and adapt to new constraints. simplecv.org is down for me right now, but I hope that it addresses this concern!
The principles of computer vision are not too difficult to grok, requiring only knowledge of geometry and basic linear algebra. Two popular (dated, but still relevant) introductory texts are referenced to below [1] [2]. However, papers describing techniques that work in practice are often dense reads involving concepts from signal processing, control theory, and probability (e.g., [3]).
I personally enjoy learning about simple techniques that are also very effective in practice (e.g. Viola-Jones detection [4], SIFT points [5], RANSAC [6]), and I hope that simplecv.org might go over these in detail too.
[1]: http://www.robots.ox.ac.uk:5000/~vgg/hzbook/ http://www.robots.ox.ac.uk:5000/~vgg/hzbook/
[2]: http://dl.acm.org/citation.cfm?id=551277 http://dl.acm.org/citation.cfm?id=551277
[3]: http://robots.stanford.edu/papers/montemerlo.fastslam-tr.pdf http://robots.stanford.edu/papers/montemerlo.fastslam-tr.pdf
[4]: http://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_detection_framework http://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_dete...
[5]: http://en.wikipedia.org/wiki/Scale-invariant_feature_transform http://en.wikipedia.org/wiki/Scale-invariant_feature_transfo...
[6]: http://en.wikipedia.org/wiki/RANSAC http://en.wikipedia.org/wiki/RANSAC
- taliesinb 13y agoA brief note from experience: Viola Jones is only well suited to images that are oriented in a specific direction (e.g. faces), rather than rotation-invariant (e.g. cars as seen from satellites). This is kind of a pattern with CV: it's still far more "art" than "science" at this point.
- rmattes 13y agoFor additional reference, the introductory computer vision course I recently took was based around these two freely downloadable books: http://szeliski.org/Book/ http://szeliski.org/Book/ http://www.cse.usf.edu/~r1k/MachineVisionBook/ http://www.cse.usf.edu/~r1k/MachineVisionBook/
- stan_rogers 13y agoNot hard at all. That's why the whole thing was done over the summer of '66 at CSAIL/MIT as a grad student project. Yes, nearly fifty years later it's safe to say that some progress has been made, but a solution to the general problem is still "just a few months away".
- swframe 13y agoI've worked on image recognition and find OpenCV too simple. I don't like algorithms that work on the entire image without taking into account what is being recognized. For example, if you have a combination of thick and thin edges, you only want to erode the thick ones and you only want to erode the thick edges until they are thin and smooth. If you posterize an image, you don't want to cross regions separated by long smooth edges. You don't want to blur away noise in the image because when the noise is localized, you can use it to identify what the object is (similar to the way shazam uses high frequencies to identify songs). OpenCV, simpleCV etc are very useful libraries for toying around with images. You can get interesting results without a lot of effort. But the more serious you get about image recognition, the more you find that you can't use them globally across the image. Finding the yellow car in the parking spot is a good example of the usefulness of the library and also its simplistic capabilities. It recognized a yellow patch in the image and it doesn't recognize a car in a general way. When you're ready to write code to recognize a car, you'll probably find you can't use openCV libraries. What has worked amazingly well for me, is to create a model of the image areas and then apply transformations based on the model. If you have a sharp foreground and a blurry background, don't run the recognition algorithms that rely on sharp edges on the blurry background.