Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I'm an undergrad who finds computer vision to be fascinating. Where should somebody brand new to computer vision begin?
Check out this book
http://research.microsoft.com/en-us/um/people/szeliski/book/
it is in beta stage right now and available for free.
Richard Szeliski, the author, is a a well known researcher in the field of computer vision. He is also behind the Photosynth project.
Get your hands dirty! What language do you program in? I would recommend looking at OpenCV, which is an open source library that comes with many functions you can use to build interesting systems. It is written for C++ but also has bindings for Python. It comes with many demos that you can run right away and hack around with.
For complete overview of the field books are the best way to go.
For any particular topic you want to know more about, survey papers found through Google Scholar are the way to go.
For most recent research, look at papers from CVPR, which is a vision conference:
http://www.cvpapers.com/cvpr2010.html
You definitely need a solid math background: calculus, linear algebra, signal processing, probability and statistics.
You also need to understand what specific problems are studied in computer vision: recognizing an image of a particular object, recognizing a general class of objects ("cars"), detecting whether an object is present in an image, locating an object in an image, tracking moving objects in video, reconstructing a 3D object or scene from an image or a set of images, etc.
I was once told by a professor of a good way to get into a new field. Go to the library, find the main journal for that field, and start reading abstracts to papers, until you get the lingo. In the case of computer vision, good journals to look at are IEEE Transations of Pattern Analysis and Machine Intelligence, aka PAMI, and International Journal of Computer Vision (aka IJCV). By the way, the two major conferences in computer vision are CVPR (IEEE International Conference on Computer Vision and Pattern Recognition) and ICCV (International Conference on Computer Vision).
Topics that are related or heavily overlap with vision are image processing and machine learning.
If there is a course in computer vision offered at your school, take it. Get some books on the subjects I've mentioned. If there is vision-related conference near where you live, sneak in and look at the posters.
Oh, and Matlab is a great environment to play with image processing and vision algorithms.
Some resources:
Learning about Computer Vision
Must have background on signal processing methods - Transform - Fourier - Hough -etc
May use a better environment such as MATLAB for image processing
Pattern classification methods
Neural Networks is an important and widely use tool in Computer Vision
As with all other things at school.... start by taking up a course with a good amount of project work. Explore ideas and implement algorithms in those projects that you find interesting. Wikipedia is a good beginners resource as usual. If you want books, the most popular ones are:
http://www.amazon.com/Multiple-View-Geometry-Computer-Vision/dp/0521540518
http://www.amazon.com/Computer-Vision-Approach-David-Forsyth/dp/0130851981/
http://research.microsoft.com/en-us/um/people/szeliski/book/drafts/SzeliskiBook_20100423_draft.pdf
But I would suggest before you jump in to books, take a course/go through some course slides at one of the top ten universities or via iTunesU.
I found this guide to be pretty good at introducing the novice to computer vision, but you really need to go for a MS for that. Electrical and Computer Engineering Departments offer it under a Digital Signal Processing Program, from which you can choose to specialize in Machine Vision or Digital Imaging (whatever they may call it).
SOCIETY OF ROBOTS - COMPUTER VISION TUTORIAL
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
I'm preparing a short talk for a conference in august and I'm looking for open source projects that are using agile methods internally or have tried them in the past.
My goal is to talk about the things that work well and what won't work and promote the agile methods a little bit, because I think certain agile techniques are a good fit, but don't seem to be that common in real development.
So does anyone know projects that have tried agile methods and techniques before? I'd like to contact them for a few questions.
Update:
Thanks for the answers I'll contact the teams in the next weeks. :-)
(I first have to prepare the questions and an introduction...)
I am still monitoring this question, so feel free to add more answers/projects/...
Sure, Agile favors face to face communication and most open source projects have distributed members and the distance doesn't simplify communication. Does this means you can't be Agile on an OSS project? I don't think so.
First of all, I need to say that modern tools can help to reduce the communication overhead introduced by distance: skype, phone, conference calls, video conference, collaborative editors and review tools, mail, written document, (even travel), etc. If you can avoid distance, do it. But this is not a blocker issue.
Second, Agile is in my opinion not about doing pair programming or stand-up meetings... These are just practices and practice are not an end, they are just a means. Agile is more about principles: maximizing the delivered value while minimizing waste to provide the most optimal ROI (ok, the last part may not apply for an OSS project but you still want to deliver valuable working software to your users or Darwin will make you disappear). Practices from a given methodology are a way to achieve this goal in a given context but for me Agile is still more about continuous prioritization, limiting Work In Process, (i.e. short cycles and time boxes), incremental delivery, feedback loops, high quality (perceived and conceptual), Stop-the-Line culture, building a mistake proof process, just enough specifications, just enough and just in time documentation, etc, etc. In other words, not doing pair-programming doesn't mean you can't be Agile.
Back to the question, I consider Ubuntu as a good example (maybe not strictly a programming example but it involves development): fixed date release cycles (every 6 months with several shorter iterations during these 6 months), strict prioritization of things to do, no date shifting (the scope varies), working software, and all this with highly distributed contributors and plenty of technologies and languages. Check Ubuntu Development, I'm pretty sure it's possible to contact "someone".
Another example I had in mind is Sonar. At some time, they were delivering their great piece of software every month (although it seems the rhythm is not so regular anymore). You can contact the dev team to discuss with them at SonarSource.
I would have thought that the Open Source development model was quite contra that of agile. Most agile practices (pair programming, stand-up meetings, for example) require that the developers are co-located. On most FOSS projects, the developers are widely separated geographically.
The Twisted project uses XP plus some additional procedures that it calls the Ultimate Quality Development System:
Twisted Matrix Development Process
You can try to contact the XWiki Team.
http://www.xwiki.com/xwiki/bin/view/About/Team
They have a great product, it is Open Source, Vincent Massol knows very well agile practices (espeacially tests) and the team is distributed. You can try ask for some of their "secret recipes" ;-)
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
I'm currently an undergrad in computer science and I'll be entering my final year next year. Augmented reality is something I find to be a really interesting topic, but I have no idea where to start learning about it.
Where do you start learning about this topic and what libraries are available?
Being a quite popular buzz word, augmented reality can be build with some distinct algorithms which can be learnt separately. Usually it covers:
planar object detection (can be a marker or previously trained object).
SURF/SIFT/FAST descriptors, RANSAC for homography matrix calculation
store trained objects in DB (KD-trees)
camera position estimation
augmenting 3D model with custom objects (OpenGL)
To dive into this subject I would recommend this steps:
All of this is already implemented in OpevCV, you can start playing with its examples.
To understand what's happening under the hood, take probably the best book on this topic:
"Multiple View Geometry in Computer Vision" http://www.robots.ox.ac.uk/~vgg/hzbook/ .
If you are going to play with AR on mobile phones take a look on works of scientific labs
like http://mi.eng.cam.ac.uk/~sjt59/hips.html (FAST) and http://www.robots.ox.ac.uk/~gk/PTAM/ (PTAM).
If you're comfortable with Objective-C, downloading and playing with ARKit would be great place to start. It's based on magnetometer/accelerometer readings rather than pattern recognition.
If pattern recognition is what you're interested in, then start with artoolkit instead. But that library is a bit more intense, naturally.
Take a look at this augmented reality framework comparison table to select a suitable AR framework for your work.
qualcomm's vuforia AR api is a great place to start since it is free and it has all the AR features we can think of.
And also this book gave me a huge help to start building AR apps.
Developing AR Games for iOS and Android
by Dominic Cushnan, Hassan EL Habbak
Ben Newhouse, the man behind Yelp's augmented reality Monocle feature, gave a talk at Stanford about the process he went through when making it. It is available for free on iTunes U, at this location: https://podcasts.apple.com/us/podcast/iphone-application-development-winter-2010/id384233225
(The link won't work in Chrome, but it does in Safari. If it doesn't work, just search "Yelp Monocle" in iTune's search box, and download the iTunes U lecture.)
The lecture is about programming for the iPhone, but most of it is translatable to other areas. It is packed with valuable information, and has proved extremely useful for me in seeing all the components of what i want to make.
The Pragmatic Programmer AR book is pretty good, lots of code samples and exercises that get you involved, instead of just reading about it. It is a little dated, but it should be a pretty good starting point.
This was extremely helpful to me because of the step by step tutorials and sample code: http://dev.metaio.com/sdk/getting-started/
It takes you from setting up your phone/ dev account through to tracking configurations and 3D content.
I have spent a bit of time looking for AR code for the iPhone. If you want to do AR and locations then download this project
http://github.com/adascent/iPhone-AR-Toolkit
It based on ARKit mentioned above but improved and actually compiles. The orginal AR kit does not support device rotation. Someone else added it but there actual code never worked and so a 3rd person took it and fixed it.
I am currently added more features to this code.
augmented reality is combination of 2 skills: ability to code on smartphones + using all the input sources that the handset can provide to provide interesting applications. Computer vision is a major aspect, since the camera can be used in very many interesting ways. But you must know that knowing any one aspect of it is not good enough. for example if you use comp vis, alone to detect where you are based on the camera input of a shopping mall store it is not going to be easy at all. but if you couple up your gps location etc, the problem reduces to a very managable level. So the important thing is being able to couple ideas from different aspects and knowing a little bit about both aspects. Take a smartphone programming class and a computer vision class. that should get you started.
If you're an undergrad, you start by asking faculty about it (or grad students, if you're in a place with them). Even if they don't know much about it, they'll know where to find out.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 9 years ago.
Improve this question
This semester, I will be a TA for an introductory computer science course at my university. As part of TA training, I'll be doing something called Microteaching, which is where I teach for 5-7 minutes in front of a small audience (4-5 people) and I am reviewed on my teaching style. Among being critiqued on my personal things like confidence and eye contact, I will be critiqued on how well I know the subject material, as well as how interesting it is to the audience.
So my question is: Can you offer me any suggestions of computer science related topics that:
I can begin and finish teaching in a span of 5-7 minutes
Are fun to learn about
Are accessible to a general engineering (but not necessarily computer science) audience
Some topics I have considered:
Teaching how to write Hello World in some simple language
Introducing a synchronization problem like dining philosophers
How about a simple graph algorithm like shortest paths? People will be interested because this is more or less how MapQuest, Google Maps, Garmin, and TomTom work. And if you draw a small map of your University campus you can do a quick example and there's your 5 minutes.
5-7 minutes isn't a long time at all. A quick intro or overview of something interesting might be a good choice. You could:
introduce a programming language paradigm like functional or logical with a demo of Prolog, Lisp, OCaml or Haskell.
give an overview of how HTTP requests and responses work
describe the basics of object-relational mapping
It would be good to have some resources to give them afterwards, so they can learn a lot more if they're interested.
I am a TA, but in a different subject. I think Hello World is too boring, many students may already have some experience (the hacker type), and those are fun students. Maybe you could create some quick examples in Python, that will grab the attention, maybe something like simple graphics (fractals), simple networking (maybe send SMS to phone?). I think those can be done in a few minutes if you supply instructions.
I'm trying to merge engineering types and basic computer science subject matter. To me this sounds like the sort of audience you want to present a simple application to not just theory.
Five minutes goes fast. My best advice is to practice the presentation a couple of times as a dry run and don't talk too far down to the audience.
How about: Introducing conditionals along with functions in some sort of regulation function. A quick example is a smart battery charger that needs to look at voltage to figure out how to charge Li-ion cells properly or declare them bad (think exploding laptop batteries)
How to log and watch current trends in something (gather data) and analyze it. Say a quick weather prediction example using data available from the United States National Weather Service or something along those lines.
Walk through implementing an algorithm to do some basic calculation functions useful to engineers. Perhaps a volume of water a tank can hold sort of thing.
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I would like to work on a programming project in my spare time and would like to know
if there is a project where I can help the science community in some way?
Sure, plenty! I see I'm not the first to think of numerical computation libraries like Numpy/Scipy - the code in that is actually fairly mature but they could certainly use help documenting. There's also GNU Octave, which does much of the same things as Numpy but doesn't require Python. A slightly related area in which there's a lot of work to do is computer algebra systems (CAS), basically open source equivalents of Mathematica; for example Maxima, and more are listed at http://sage.math.washington.edu/home/wdj/sigsam/opensource_math.html. You could also help with visualization libraries, i.e. creation of 2D and 3D plots and figures. For Scipy the most commonly used plot generator is Matplotlib, for example. There are also loads of more specialized data visualization tools that I'm sure you can find with a few searches.
One area that I personally think needs a lot of work is creating GUIs for the programs mentioned in the previous paragraph; one major advantage that commercial programs like Matlab and Mathematica enjoy over their open source equivalents is easy-to-use graphical interfaces. Having a nice usable interface would be great for scientists who may not be skilled in command-line-fu, but open source projects have a long way to go if they're going to catch up.
Projects like scipy and numpy are largely contributed by the scientific community. I'm sure they would appreciate any help you thought you could provide.
I know BOINC is always looking for help
Edit: Here is their programming help page http://boinc.berkeley.edu/trac/wiki/DevProjects
The Bio* projects like BioPerl, BioPython, or BioRuby would certainly like some help, too.
http://sourceforge.net/search/?type_of_search=soft&words=science
In addition to searching open source projects online, you can try to contact your local university and ask if any of their researchers (students or faculty) need development help.
If you are still looking, feel free to contact me via my profile page - I know of a hardware product that needs software - it is used for research (chemistry and biology)
The nuclear ad particle physics communities make heavy use of ROOT, which is developed using an open source methodology. They accept suggestions and patches without much trouble. The main work is in C++, but there are binding and support for other languages as well.
I'm sure that other disciplines have their own domain specific tools. For instance, I know that there are open Computational Fluid Dynamics and Finite Element systems.
Have a look around. While domain knowledge would be helpful, most big tools are going to need help with routine stuff like RDBMS access, GUIs, documentation, and so on...
You can discover the current problems of Science by reading the abstracts of the academic journals. e.g. the Bioinformatics journal.
A few examples:
Find a faster/efficient methods to assemble a huge set of short DNA reads:
Find a way to build an efficient social scientific network
Find a way to compare thousand of human genomes
....
you could also propose your help on Nature Network:Collaboration or FriendFeed: The life scientists
There are many exicting opportunities in chemistry. There is a strong Open Source community, much of which is organized under the Blue Obelisk (http://www.blueobelisk.org). There have been major contributions in visualisation and algorithms which did not need previous chemical knowledge and the community is very welcoming to anyone who wishes to help.
For an example of the standard which has been achieved take a look at Jmol which visualizes molecules and other chemistry in 3D (http://www.jmol.org);
There is also real opportunity to do porting between platforms/languages. The commonest ones are Java, Python, C++ and we have been working in C#. You don't have to be an ace programmer either - contributions to data standards, data resources, tutorials, packaging, installers, testing, etc. are all highly valued.
Some of these projects are within the top 100-500 projects on Sourceforge.
Don't forget that if you find a project to be a bit over your head or you aren't able to really contribute, but you still like the idea of it, you can always donate!
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 8 years ago.
Improve this question
I was curious if anyone out there has experience getting the necessary legal documents (user agreements, privacy policies, disclaimers, etc.) for a small software business. For example if you just want to have a software 'company' that sells a few piece of software that you have written, are there cheap solutions for something small scale like that?
In Micro-ISV: From Vision to Reality, Bob suggests MegaDox.com and Soft14.com
Stationery stores will sell standard boiler plate contracts.
For software specific stuff most companies just copy the ones from bigger companies and change the name!
The suggestions by others in other answers are probably fine if you intend to stay small scale, but if your intent is grow, and particularly if you might want to have someone else invest money in the business, then it makes sense to invest in a lawyer, one who has experience in software. It doesn’t have to cost a lot if you can develop a relationship with someone interested in working with you for the long run and not running up fees on those basic documents.
By the way, either route you go, it makes sense to read the documents and make sure they fit what you’re actually doing. If you post a boilerplate privacy policy that says you do x, y and z with customer data, but in fact you do a, b and c instead, you’re creating more potential legal troubles than you’re solving.
I'm testing the waters for a crowd funded project to develop user-friendly EULAs. The EULAs themselves would be developed like open source. If a user encounters one of these "open" EULAs, then the user can feel better about agreeing it because
it's been reviewed by an open process, and
you might encounter this same EULA over and over, so you don't have to read it every time.
https://sites.google.com/a/x2xroads.com/nutshell/open-eula
I have recently been looking for the same info as the OP and found a great book which includes standard agreements for software companies which you may use as is or modify with the help of a lawyer.
The IT/Digital Legal Companion: A Comprehensive Business Guide to Software,
Internet, and IP Law Includes Contract and Web Forms
By: Gene K. Landy; Amy J. Mastrobattista
Publisher: Syngress
Print ISBN-10: 1-59749-256-6
Print ISBN-13: 978-1-59749-256-0
It also includes sections explaining issues that you need to consider for different aspects of you software business in regard to contracts, privacy and intellectual property.