Skip to main content

Using image processing to automatically detect labels (part 5)

I wanted to dig a bit further into image processing and seeing what else I could do to automatically detect labels. Please read part 1, part 2, part 3 and part 4 first, if you haven't already.

My previous methods focused on histograms using masks but this only works well if the image is perfectly centered and cropped properly. This is not always the case, as I already showed in the last articles. It would work better if I knew where the label would be in the image, so I can create a different mask for the right part of the image and then work with histograms.

Detecting where a label starts can be done with edge detection. This should work in most cases, because the label has a different colour than the vinyl. In OpenCV there are various ways to detect outer edges and I am going to use the "Canny edge detector".

For this I first translate the image to greyscale, and then run the edge detector (for the threshold values I used 40 and 200). For one of my testing images that looks like this:


and when plotting the edges on the original:


which is completely useless. The edge detector found 434 edges, which is not what I want.

As you can see there is quite a bit of noise, for example some dust in the lower left corner, some grooves in the upper left corner and a number etched in the runout groove in the lower right corner. First I want to get rid of this noise, and then try again.

Many tutorials suggeted I should use a Gaussian blur before running the edge detector. So, after running a Gaussian blur (kernel size: 5x5) I get the following:



which plotted on the original image looks like this:


This is still not what I want: 274 edges were detected. So I looked a bit further and discovered the median blur. Adrian from Pyimagesearch called it "most effective when removing salt-and-pepper noise" which sounded like a good method to try to get rid of the dust particles.

With a kernel size of 7 I get 225 edges (still not what I wanted), and with a kernel size of 9 only one outer edge is detected, which is exactly what I was looking for:


and when plotting the outer edge on the image:


Success! With my histogram masking algorithm I got bad results with a few images, so I revisited them with the edge detector, with good results, for example:




Edge detection didn't work with every of my test images though. This was mostly due the colour of the labels and the vinyl being very close. Nevertheless it seems like edge detection can be a very effective tool.

Next step: finding the radius and center, which I am going to cover in a future blog post.

Comments

Popular posts from this blog

SID codes (part 1)

One thing that I only learned about after using Discogs is the so called Source Identification Code, or SID. These codes were introduced in 1994 to combat piracy and to find out on which machines a CD was made. It was introduced by Philips and adopted by IFPI, and specifications are publicly available which clearly describe the two available SID codes (mastering SID code and mould SID code). Since quite a few months Discogs has two fields available in the " Barcode and Other Identifiers " (BaOI) section: Mould SID code Mastering SID code A few questions immediately popped up in my mind: how many releases don't have a SID field defined when there should be (for example, the free text field indicates it is a SID field)? how many releases have a SID field with values that should not be in the SID field? how many release have a SID field, but a wrong year (as SID codes were only introduced in 1994) how many vinyl releases have a SID code defined (which is impossi

SPARS codes (part 1)

Let's talk about SPARS codes used on CDs (or CD-like formats). You have most likely seen it used, but maybe don't know its name. The SPARS code is a three letter code indicating if recording, mixing and mastering were analogue or digital. For example they could look like the ones below. There is not a fixed format, so there are other variants as well. Personally I am not paying too much attention to these codes (I simply do not care), but in the classical music world if something was labeled as DDD (so everything digital) companies could ask premium prices. That makes it interesting information to mine and unlock, which is something that Discogs does not allow people to do when searching (yet!) even though it could be a helpful filter. I wanted to see if it can be used as an identifier to tell releases apart (are there similar releases where the only difference is the SPARS code?). SPARS code in Discogs Since a few months SPARS is a separate field in the Discogs

Country statistics (part 2)

One thing I wondered about: for how many releases is the country field changed? I looked at the two most recent data dumps (covering February and March 2019) and see where they differed. In total 5274 releases "moved". The top 20 moves are: unknown -> US: 454 Germany -> Europe: 319 UK & Europe -> Europe: 217 unknown -> UK: 178 UK -> Europe: 149 Netherlands -> Europe: 147 unknown -> Europe: 139 unknown -> Germany: 120 UK -> US: 118 Europe -> Germany: 84 US -> UK: 79 USA & Canada -> US: 76 US -> Canada: 65 unknown -> France: 64 UK -> UK & Europe: 62 UK & Europe -> UK: 51 France -> Europe: 51 Saudi Arabia -> United Arab Emirates: 49 US -> Europe: 46 unknown -> Japan: 45 When you think about it these all make sense (there was a big consolidation in Europe in the 1980s and releases for multiple countries were made in a single pressing plant) but there are also a few weird changes: