Jump to content

  • Log In with Google      Sign In   
  • 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.

  • You cannot reply to this topic
4 replies to this topic

#1 romobomo   Members   -  Reputation: 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.

Untitled.jpg

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


Sponsor:

#2 Álvaro   Crossbones+   -  Reputation: 12337

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.

#3 achild   Crossbones+   -  Reputation: 1612

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.


#4 romobomo   Members   -  Reputation: 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!

#5 romobomo   Members   -  Reputation: 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.

Untitled-1.jpg




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.



PARTNERS