Sign in to follow this  
romobomo

2D Image error correction algorithm(solved)

Recommended Posts

romobomo    133
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 [b]algorithm's primary function would be to detect the size of the colored region.[/b]

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

[attachment=12862:Untitled.jpg] Edited by romobomo

Share this post


Link to post
Share on other sites
alvaro    21246
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 [url="http://en.wikipedia.org/wiki/Disjoint-set_data_structure"]union-find[/url]). It shouldn't be too hard to program this, and union-find is fun if you've never seen it before.

Share this post


Link to post
Share on other sites
popsoftheyear    2194
[url="http://en.wikipedia.org/wiki/Connected-component_labeling"]Connected Component Labelling[/url] 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 [i]easiest[/i] 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this