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

### Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

# how can we do "8-coarse division of RGB color space" for dominant color extraction?

Asked by preet on 31 Dec 2012

this is basically for quantized color.

## 2 Answers

Answer by Image Analyst on 31 Dec 2012

Try rgb2ind() or this kmeans example

## 7 Comments

preet on 31 Dec 2012

its divide the rgb color space into 8 blocks.like this

http://140.117.166.1/eehome/ISCOM2005/SubmitPaper/UploadPapers/ISCON05_00089.pdf

my problem in this pdf page 5.

Image Analyst on 31 Dec 2012

It looks like the FAQ applies here: http://matlab.wikia.com/wiki/FAQ#Can_you_program_up_the_algorithm_in_this_article_for_me_and_explain_it_to_me.3F, though it looks somewhat interesting so if I can find the time today or tomorrow maybe I can read the paper.

preet on 31 Dec 2012

i appreciate if u do for me... happy new year..

Answer by Walter Roberson on 31 Dec 2012
```dImage = im2double(YourImage);
binned_image = round(dImage);
quadrant_num = binned_image(:,:,1) * 4 + binned_image(:,:,2) * 2 + binned_image(:,:,1);
```

quadrant 0 would be (low red, low blue, low green), quadrant 1 would be (low red, low blue, high green), quadrant 2 would be (low red, high blue, low green), and so on up to quadrant 7 as (high red, high blue, high green)

You might want to add 1 to the quadrant number, if you want to use it as an index.

## 10 Comments

Walter Roberson on 31 Dec 2012

The paper says,

```The color space is equally divided into 8 coarse partitions according to the quantity of each color component.
```

So you do not want to do something like rgb2ind() does, as rbg2ind() does not divide the color-space equally. The code I gave does divide the color-space equally, and the value I return for each point is an index like rgb2ind() would return, with the minor exception that for technical reasons, rgb2ind() would correspond to taking uint8() of quadrant_num

preet on 1 Jan 2013

i said i need the result like rgb2ind()..

Walter Roberson on 1 Jan 2013

Okay, here it is:

```dImage = im2double(YourImage);
binned_image = round(dImage);
quadrant_num = uint8( binned_image(:,:,1) * 4 + binned_image(:,:,2) * 2 +   binned_image(:,:,1) );
```

quadrant_num will now be exactly like rgb2ind() in that it will return a 2D array of uint8() values, each of which is an "ind". Keep in mind that exactly like rgb2ind(), the value 0 represents the first color in the color map, and 1 represents the second color, and so on.

Contact us