Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Colour segmentation on resistor color band and calculate the value

Asked by Ng

Ng (view profile)

on 11 Dec 2012
Latest activity Commented on by reginald kwenda

reginald kwenda (view profile)

on 24 Mar 2015 at 21:02

I'm a beginner to Matlab. I need to do a color segmentation on a resistor color band, identify the color and do a calculation based on the color. Any guideline for this?

4 Comments

Ng

Ng (view profile)

on 29 Dec 2012

Is my bad for not giving enough information. I understand that it is impossible to find an answer that fulfill my need exactly. What I need just a simple guideline as I never learn about this program at all. What I needed now is how to identify all the 10 colors of the resistor band and made a calculation on that. Basically I've tried some code given by ImageAdjust and successfully identify 3 color only which is red,green and blue. The other colors really making me headache.

Stephen Cobeldick

Stephen Cobeldick (view profile)

on 23 Mar 2015 at 16:52

You can approach this problem from both ends: having a list of known resistor values could help you assign a weight to the color-combinations that you get. Because resistors come in fixed and known combinations you can use this to choose the most likely value out of several similar matches, or confirm/reject the value that you have detected.

You might find my FEX submission useful to help do this:

http://www.mathworks.com/matlabcentral/fileexchange/48840-round-to-electronic-component-values

The main function rounds the input values to the standard resistor values: you can use it to check your detected color combination are the same as a known standard value:

>> round60063(514, 'E24')
ans = 510

Its second output returns the full sequence of values that cover the input values, for example:

>> [~,pns] = round60063([1,1e6],'E12');
pns = [1;1.2;1.5;1.8;2.2;2.7;3.3;...470000;560000;680000;820000;1000000]

returns in pns all values in the E12 range, between one and one million.

reginald kwenda

reginald kwenda (view profile)

on 24 Mar 2015 at 13:15

i am currently working on the same project , i have looked at your code but i am finding it hard to understand

Ng

Ng (view profile)

6 Answers

Answer by Image Analyst

Image Analyst (view profile)

on 11 Dec 2012
Accepted answer

I have color segmentation tutorials here if you're interested: http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862. Basically you need to find the regions of interest first - the bands. You might use a variety of techniques depending on how repeatable the lighting and positioning are from image to image. Then you can look at the mean RGB value of each band and see which "master" color it's closest to. If the band is closer red color than any other, then assume it's red.

17 Comments

Ng

Ng (view profile)

on 29 Dec 2012

oo...I got it d...haha...thanks alot >.<

Image Analyst

Image Analyst (view profile)

on 30 Dec 2012

Good. Sounds like I helped you solve it.

Ng

Ng (view profile)

on 30 Dec 2012

Thanks alot for your help. >.<

Image Analyst

Image Analyst (view profile)

Answer by vincent

vincent (view profile)

on 11 Mar 2013

Try not to be intimidated by the colours, I think it should be easy to get round this. Certainly I wouldn't let it put you off electronics, too much fun to be had :-)

You would ideally have them sorted into separate marked drawers anyway. For example these storage cabinets are what we use. It has 44 separate drawers that can be divided themselves into three parts with dividers, and a slot at the front for a label card. There are many types/sizes around so find something that suits your needs.

That gets you "pretty certain" that the resistor you take out of the drawer will be the right one. To make sure though, I would maybe buy a cheap multimeter (or repurpose one) and set it up as a value tester. If you make a little frame to set the probes just the right distance apart, you can quickly place the resistor between them and double check it's value.

This is more for loose resistors, but another option is to keep them in their packets in the drawers until needed, then take out as necessary. Though you can get errors in the packaging/component it's very very rare, and if you test one you can be even more sure all the rest will be the same anyway.

This should ensure you have very little chance of making a mistake (probably about as much as anyone else, many don't go by the colour bands anyway)

Most other components nowadays have values/codes marked on them, and if you are working with SMD (most) resistors do too - it's the unmarked capacitors that are the pain (for everyone) there :-) http://www.resistorguide.com/resistor-color-code/

0 Comments

vincent

vincent (view profile)

Answer by reginald kwenda

reginald kwenda (view profile)

on 19 Feb 2015
Edited by Image Analyst

Image Analyst (view profile)

on 19 Feb 2015

Hello guys, I am working on the same problem. I have managed to detect Red, Green, and Blue following an example that was given by Image Analyst ( http://www.mathworks.com/matlabcentral/answers/57356#comment_119461)

I have detected these colors off a resistor, but I don't know how to detect other colors such as yellow or brown.

1 Comment

Image Analyst

Image Analyst (view profile)

on 19 Feb 2015

Each color has a hue. Convert your image to hsv space and find the hue and see which of the standard colors it comes closest to. Post your code and image in a new question if you need more help.

reginald kwenda

reginald kwenda (view profile)

Answer by reginald kwenda

reginald kwenda (view profile)

on 26 Feb 2015 at 16:01
Edited by Image Analyst

Image Analyst (view profile)

on 4 Mar 2015 at 14:58

i have got the code to detect most of the colours except black and white. From there how can i use if statement to give each colour a number and add them up to give resistance value.

Above is the image I am using.

2 Comments

Image Analyst

Image Analyst (view profile)

on 4 Mar 2015 at 15:02

What I would do is to first find the resistor and then get a mask that is a stripe through the color bands. Then convert to hsv and find the color of the brown. And then convert to lab color space and find the delta E (color difference) of all pixels to that standard brown color. Regions with high delta E will be the color stripes. Then segment each of those and get the mean LAB color and compare that to known LAB colors of standard colors like red, green, blue, gold, etc. I have color segmentation programs in my file exchange. http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862

Image Analyst

Image Analyst (view profile)

on 21 Mar 2015 at 14:12

For black and white, you can convert to gray scale and look for pixels with values less than 30 (or whatever) or more than 200 (or whatever). Make sure you filter by size so you don't get the legs or background or reflections.

reginald kwenda

reginald kwenda (view profile)

Answer by reginald kwenda

reginald kwenda (view profile)

on 21 Mar 2015 at 12:42
Edited by reginald kwenda

reginald kwenda (view profile)

on 22 Mar 2015 at 20:53

@image analyst i was replying to you

11 Comments

reginald kwenda

reginald kwenda (view profile)

on 24 Mar 2015 at 9:45

i am getting errors with the if statements

Image Analyst

Image Analyst (view profile)

on 24 Mar 2015 at 17:19

redMask is an image, so why is it the expression of an "if" statement - that doesn't make sense.

Also, you got the wrong values for green and blue - you swapped the values. Green should be 5 and blue is 6.

reginald kwenda

reginald kwenda (view profile)

Answer by reginald kwenda

reginald kwenda (view profile)

on 24 Mar 2015 at 18:48

i was trying to apply a condition that i can use with variables to assign numbers of the colour

3 Comments

Image Analyst

Image Analyst (view profile)

on 24 Mar 2015 at 19:05

Start a new discussion with you as the author, so we don't keep bugging Ng with emails. Then attach your code (what you have so far), and your image.

reginald kwenda

reginald kwenda (view profile)

on 24 Mar 2015 at 21:02

thank you for your effort , i have now created my own question and uploaded the picture and code i have so far

reginald kwenda

reginald kwenda (view profile)

Contact us