I started writing this post with the idea that I would just share a few resources that have proved incredibly useful for my/our thesis work. However, after writing the majority of the text for this post, I realized that this could be a good opportunity for others in the group to share some resources. The general prompt: “What are your resources?” Share them with the group. Whether they are blogs that you visit frequently, programming tools you’re interested in, writing samples, books, esoteric wikipedia entries, … etc. Put them here to preserve them for future generations.
Some recent additions to my set of resources:
For any of you in the group who are interested in going further with Python I have complied a brief list of resources that have been useful for me, and one that I have yet to test out but looks very useful. Specifically if you’re looking to implement 3D OpenGL graphics, computer vision, and/or machine learning algorithms in your projects take a look at the following resources.
1. Nicholas Rougier, a research scientist at INRIA, is the author of numerous software libraries. I have been using his OpenGL library for Python + NumPy quite extensively and have been very pleased by the continual development of the package. It has been incredibly useful for building 3D and 2D visualizations. Take a look at some of the examples (some very elegantly written Python code) and download the project from the google project’s page.
2. On image processing, structure from motion, and computer vision. Jan Erik Solem has written a really great book filled with example code and mathematical explanations of computer vision algorithms titled, Programming Computer Vision with Python. The book covers everything from setting up libraries with python, to basic image processing, homography, descriptors, camera modeling, multiple view geometry, and machine learning (clustering, searching, classifying, segmentation, etc). Many of the algorithms in this text are derived from Hartley & Zisserman Multiple View Geometry — the book often referred to as the ‘bible’ of computer vision. Another good resource that I found really useful is Marc Pollefeys’s book/set of notes titled, Visual 3D Modeling from Images. Also, if you are doing some CV projects, you should certainly have OpenCV installed on your machine. If you’re running Mac OS, then you can install OpenCV with Python bindings with incredible ease by using Homebrew, Mac package manager. If you’re new to OpenCV and CV in general take a look at Gary Bradsky’s O’Reilly book Learning OpenCV (you can read this online free via MIT’s library subscription). Bradsky’s book is a little outdated (2008), so you might have better luck just reading the online documentation for the latest version of OpenCV.
3. Also of interest is the Scikit-Learn machine learning in Python package. For a quick start check out some of the examples. This package could be used to directly for computer vision projects as well (even though many ML algorithms are implemented in OpenCV, perhaps this package will be easier to use/integrate into projects… yet to be tested).
4. Git – source control management. In working together on our thesis, Moritz and I needed to find a way to collaboratively work on versions of the same files and manage changes to gigabytes of files. At first we tried working with Subversion for version control, saving everything to a central server. This was working decently well, but we did run into some problems in terms of ignoring files that we didn’t want to upload and in being able to make separate development versions of certain areas that were were tinkering around with. After working with SVN for over two months we made the switch to GIT. We ended up installing GIT on our server and after a few day learning curve, we have found it to be better (for our purposes) than SVN. Maybe you’re familiar with or have visited github while looking for documentation on software or checking out other people’s projects. You can use github for free if you keep your repository within their allotted space limits, or you could set up a repository on your own server. And, if you want to use your MIT server space you can install git there with an auto installer — how convenient! Also, Moritz and I have been using SourceTree as a graphic interface client for our Git repository. Of course you could always just use the terminal…
5. Looking for a nice text editor for programming? Moritz found sublime text, and Carl, Moritz, and I have been testing it out for a few weeks now. The miniature/zoomed out view of the entire document is a cool feature. You can download the beta free. You may have to customize your environment a little bit to get things set up on your machine, but after that, everything works great. Also a plus, it runs on Mac, Linux, and Windows.
6. Want to batch process a bunch of images without using Photoshop or Automator? Try out ImageMagick and do batch edits from the command line. Some of the commands might seem archaic, but it is a really very powerful tool. For Mac users, you can also install this via homebrew package manager.
7. I have been doing some work recently where it is helpful to know the intrinsic parameters of a camera. For most cameras, this information is saved as Exif data in the image file. With Python you can use Python Imaging Library (PIL) to read the exif data for image files, but unfortunately not to write exif data. In terms of reading/writing Exif data Phil Harvey’s ExifTool does the job. I was surprised to learn how many file types contain Exif data… not just images.
8. (Extra)curricular browsing? When there is time I always enjoy reading Cabinet Magazine. Each issue is organized around a concisely stated theme. The most recent issue/theme is “24 Hours.” Also 032c is always excellent (however, many image here may be nsfw). For visual currency/distractions — time for some image-heavy blogs: ilikethisart.net, triangulationblog, rhizome.org.
What have you discovered recently? Or, what have you been using, visiting, looking at, listening to, etc… recently? Reply with links.