Sign in to follow this  

2D Image error correction algorithm(solved)

This topic is 1853 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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
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
[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
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!

Share this post


Link to post
Share on other sites
Based on this image, I'm pretty sure you can guess why this was useful.

Thanks again guys.

[attachment=12869:Untitled-1.jpg]

Share this post


Link to post
Share on other sites
Sign in to follow this