Join Kevin Skoglund for an in-depth discussion in this video Introducing image analysis, part of Code Clinic: Ruby.
(clicks and whirs) - [Voiceover] Hello, and welcome to Code Clinic. My name is Kevin Skoglund. Code Clinic is a monthly course where unique problems introduced to a collection of lynda.com authors. In response, each author will create a solution using their programming language of choice. You can learn several things from Code Clinic: different approaches to solving a problem, the pros and cons of different languages, and some tips and tricks to incorporate into your own coding best practices.
We'll work on a problem centered around image analysis. In one sense, this is simply data analysis. Images are really nothing more than specialized and well-defined sets of data. An image consists of pixels. Pixels consist of data representing the color of the pixel, and in some cases, the pixel's transparency. The pixels are arranged in rows and in columns. When they're assembled correctly, they represent an image. Our brains are very good at recognizing patterns, but computers are not. Think about CAPTCHA security devices, those puzzles you sometimes see when logging into a website.
The CAPTCHA asks what letters and numbers are in the image. Information is obscured by random lines, sometimes by overlapping transparent blocks of color. All of those intersecting shapes make it difficult for a computer program to separate out the background noise from the actual data. Another example is the test to determine colorblindness. Letters and numbers are hidden in a circle filled with different color dots. If you're color blind, you will not be able to see the numbers. For a computer program, this can be incredibly difficult as it requires detecting an edge, as well as recognizing the overall shape.
It's difficult, even for the most advanced programmer. In this problem, we're trying to solve a common problem for many photographers: plagiarism. A photographer will take a picture and post it on the internet only to discover someone has stolen their image and placed a subset of that image on their website. For example, here's an image, and then a cropped version of that image. It would be extremely handy if there was a program searching the internet for cropped versions of an original image so that a photographer could protect their rights.
In fact, Google image search will do just that. But we're curious about how it works and what the required code might look like. Here's the challenge: given two images, our program should determine if one image is a subset of the other image. If it is, it's a cropped image, it'll tell us so, but if it's not, if the images are different, it should tell us that it's not a match. We'll assume that both images are JPEG files and that the resolution and bit depth are the same for both.
We've provided a set of sample images to use. Our program should return results showing which images are cropped versions of other images. Perhaps you want to pause and create a solution of your own, how would you solve this problem? In the next videos, I'll show you how I solved this challenge.
Kevin introduces challenges and provides an overview of his solutions in Ruby. Challenges include topics such as statistical analysis, searching directories for images, and accessing peripheral devices.
Visit other courses in the series to see how to solve the exact same challenges in languages like C#, C++, Java, PHP, and Python.
Skill Level Intermediate
Q: I'm running Windows and can't get some of the code shown in the videos to install. Is there something else I need to do?
A: For exercises that compile third-party code, Windows users may need
to install the RubyInstaller Development Kit (DevKit). DevKit is a
MSYS/MinGW-based toolkit than enables you to build many of the native
C/C++ extensions available for Ruby. DevKit was previously included in
the Windows installer, but now requires a separate download and
installation. The installation instructions are available at https://github.com/oneclick/
Q: Why can't I access the Lake Pend Orielle site (http://lpo.dt.navy.mil)?
A: The Lake Pend Orielle site is not accessible in some geographical areas. We have contacted the owner of the server to try to resolve this issue.
Q: I am unable to access the Lake Pend Oreille data from outside the U.S.
A: A static copy of this data is provided here for lynda.com members outside of the U.S