Close
Written by
Peter Brookes-Smith

Peter Brookes-Smith

Learning with colour…

I’ve been creating, building or transforming businesses for over 25 years now, but before that I was a developer. And whilst it’s been a long time since I wrote software professionally, I still love to have a side project to help me learn new things (and it’s a more useful hobby than doing a crossword!).

A few months ago, I came across Adrian Rosebrock and his site pyImageSearch. He has a great style and gives away loads of free resources to readers who are interested in computer vision.

Systematic analysis of images / videos using computer vision and AI techniques is a really hot topic at the moment. The rise of Nvidia and its sideways land grab into the world of machine learning gives us an indication of how closely these two fields are related. I expect to see acceleration, not a slowing down here.

Adrian’s last update concerned the analysis of images for colourfulness and responding to a reader’s question, he offered some strategies then took one of them to conclusion. I was intrigued by one of his alternatives and thought I’d take the opportunity to learn some more about this amazing technology.

The challenge was to build an analysis of the colourfulness of an image and then show the original image but with some visualisation of how colourful it was, overlaid.

But first, I needed an image that had some colourful regions:

Here’s Basil!

He’s a footballing, fearless five year old Chocolate Lab.
We can see Boris (alpha dog!) in the background as well!

Tactics

I took the short function provided by Adrian (after David Hassler and Sabine Süsstrunk) in a previous blog to calculate the colourfulness of an image. I then used it instead to calculate the same for a subsection (or Region Of Interest, ROI) of the main image.

In a straightforward way, I looped over the rows in the image and then the pixels in each row. For each pixel, I put it at the centre of an ROI and then calculated the colourfulness of the ROI. I stored the colourfulness and of course it created a matrix the same shape (minus half the width of the ROI) as the main image.

Then I did a bit of arithmetic to stretch the colourfulness and created the following image. It shows the most colourful areas as lighter:

With the first image safely saved away, it’s onto the second. How could I create an overlay so that we can see the original image more clearly than above and we can still get a sense of the colourfulness?

We can take the original image, make it grayscale only then add two duplicate channels to facilitate a bit of colour. Then take the analysis image above and combine it with the duplicated red channel (with some squashing and squeezing of the colour space) to make the most colourful areas appear red.

A picture speaks a thousand words. Have a look below:

I confess that I’m struggling at the moment to see what the practical application of visualising the colourfulness of an image would be! Maybe in the medical world it could be useful to draw a researcher’s eye towards a ROI on a scan that was above a threshold? If you have any great ideas, please let me know!

However, the ability to systematically identify the most colourful parts of an image in order to conduct some further processing could definitely be useful.

For me, the fact that I delved into a toolstack for image analysis and successfully completed some basic analytical processes and manipulation was a good result.

If you’re interested in the technical bits, the program is written in Python 3 with use of numpy and opencv3. I didn’t do any performance optimisation and the process is quite intensive. So be warned it took about 1.5 hours to generate the large images (about 4seconds for the shrunk versions).

This problem tickled my fancy, kept me entertained for a few hours, taught me some new things and is part of “smashing myself into new ideas”. It’s one of the techniques we use to increase our ability to innovate.

If you’d like to know anything more about my little side project, you can find the code on my personal github page

If you’d like to know anything more about the innovative ways we help companies solve their hardest problems en route to their digital transformation, please drop me a line.

And finally, if you’re nursing your own side project, I’d love to hear about it!

Share this post on

2 thoughts in Comments

  1. Michal Zgrzywa

    I really like this one, Peter. I hope no animal was hurt during this process 🙂
    I agree that the best way to learn is to try to create something yourself. This way you are exposed to many real problems you wouldn’t even expect to exist. And need to find solutions to all of them until you reach your goal.
    I will share my own side project soon in a separate post, together with its current manifestation: the 10-bit, monochromatic, intelligent, one and only “die Wunderlampe”. Stay tuned.

    Reply
  2. Peter Brookes-Smith Post author

    No animal was hurt during the making of this blog

    The football came closest to injury but survives to this day as the picture shows

    However, if we believe that history holds clues to our future then the fate of the white and blue football could give us cause for concern!

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Read next

REAL UX help wanted! – why recruiting UX Designers is such a drag…

Getting the right candidate to fill the open ‘UX Designer’ position at your company can be painful. Currently, the job market is full of people calling themselves ‘UX Designers’ (or something similar) but the number of potential candidates that actually live up to the title is much lower. The second reason why companies struggle so much with recruiting UX is […]

Read more