• Create Account

## 2D Image error correction algorithm(solved)

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

4 replies to this topic

### #1romobomo  Members

133
Like
1Likes
Like

Posted 20 December 2012 - 11:09 AM

So I'm having a brainfart at the moment... but here's the synopsis.

In the image below, you'll notice I've circled (in purple) some bits of small color. This image is created using layered perlin noise. This is not done in real-time, and so is not heavily performance reliant... Accuracy is more important. I'm happy with the outcome with the exception of the small bits that I've circled. So I now need an algorithm to either; 1.) Process the image to see if these "errors" exist, and if so produce a new image. or 2.) Process the image and blend the small errors with their larger counterpart (eg. a tiny spec of brown in a big orange section will blend to orange).

Thoughts, Suggestions?

Thanks!

I should add, they're errors because the region of color is too small. So the algorithm's primary function would be to detect the size of the colored region.

EDIT: Solutions can be in any common language (C, C++, C#, JAVA, or even psuedocode), I can work it from there.

Edited by romobomo, 20 December 2012 - 07:35 PM.

### #2Álvaro  Members

20266
Like
1Likes
Like

Posted 20 December 2012 - 12:33 PM

Think of a graph whose nodes are the pixels, where two nodes are connected by an edge if they are contiguous and they have the same color. Now identify the connected components of the graph and count their sizes (this can be done with union-find). It shouldn't be too hard to program this, and union-find is fun if you've never seen it before.

### #3achild  Members

2194
Like
1Likes
Like

Posted 20 December 2012 - 02:14 PM

Connected Component Labelling is what you want. It is often the basis for many kinds of image analysis. In your case each pixel will be labelled, and you can just measure the area as you label it. For instance, you may keep a vector or map with each label as the index, and increment the area count as you go. Or maybe you could just detect it after the fact - whatever is easiest for you since performance isn't super-critical.

At work we use a super optimized blob detection algorithm. I'm working on something on my own time that, when importing textures, automatically detects where the various textures are on a single image. It uses a customizable flood fill algorithm. The wikipedia article on connected component labelling also has Union-find in it's see-also section, as alvaro mentioned.

You can simply determine the area as you label, whichever method you choose, and if it is too small, I dunno, refill that area with the data from one of the other perlin noise layers bordering it? Not sure how you are getting the image exactly but you'll know the area you need to "fix".

Edited by achild, 20 December 2012 - 02:16 PM.

### #4romobomo  Members

133
Like
0Likes
Like

Posted 20 December 2012 - 03:52 PM

Ah, perfect. That's exactly what I needed. Was just drawing a blank on this one, but I've got it now. Thank you both!

### #5romobomo  Members

133
Like
0Likes
Like

Posted 20 December 2012 - 07:44 PM

Based on this image, I'm pretty sure you can guess why this was useful.

Thanks again guys.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.