Remplissage à l'aide d'une pile
Je suis en utilisant la récursivité remplissage de l'algorithme en Java afin de combler certaines zones d'une image.
Avec de très petites images, il fonctionne très bien, mais quand de l'image devient plus grand, la JVM me donne un tas Sur le Flux d'Erreur.
C'est la raison pour laquelle j'ai réimplémenter la méthode à l'aide d'un pot de peinture avec mon propre pile. (J'ai lu que c'est la meilleure façon de le faire dans ce genre de cas)
Quelqu'un peut-il m'expliquer comment code? (si vous n'avez pas le code à la main, avec le pseudo-code de l'algorithme sera très bien)
J'ai lu beaucoup de choses sur Internet mais je ne l'ai pas compris très bien.
EDIT: j'ai ajouté mon code récursif
public void floodFill(int x, int y, Color targetColor,Color replacementColor) {
if (img.getRGB(x, y) != targetColor.getRGB()) return;
img.setRGB(x, y, replacementColor.getRGB());
floodFill(x - 1, y, targetColor, replacementColor);
floodFill(x + 1, y, targetColor, replacementColor);
floodFill(x, y - 1, targetColor, replacementColor);
floodFill(x, y + 1, targetColor, replacementColor);
return;
}
Merci!
Si vous deviez afficher votre code existant (ou un résumé de celui-ci), quelqu'un pourrait être en mesure de vous dire comment l'écrire d'une manière qui n'est pas récursive, si c'est ce que vous êtes après.
Je vous conseille de choisir l'un de la file d'attente basé sur des algorithmes qui y sont présentées, elles sont plus faciles à mettre en œuvre que d'une pile à base de solution, à mon avis.
Merci pour la réponse, j'ai essayé de mettre en œuvre avec l'explication de Wikipedia, mais je ne sais pas comment. C'est la raison pour laquelle je fais ici une question. Si quelqu'un pourrait-il m'expliquer avec d'autres mots, je serai très reconnaissant.
OriginalL'auteur dafero | 2010-05-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la Queue pour retirer la récursivité de remplissage de l'algorithme. Voici quelques idées de base:
Le ci-dessous mon code Java pour résoudre similaire, mais différent problème de blob de détection. J'espère que vous pouvez obtenir des idées à partir de cela et peut s'adapter, c'est le problème. Le code n'est pas bien compte.
Entrée de Test:
Dans l'exemple de code, ce que fait le programme est l'incrémentation de la valeur de
pixelCount
variable. Peut-être vous voulezsetRGB
à ce point à la place? Aussi, l'analyse de l'ensemble de la zone de l'image pour chaque blob. Vous pouvez les remplir qu'une seule goutte, de commencer à le remplir à certain point.Ouais! - Je l'obtenir! Sans votre aide ne serait pas possible!! Juste que j'ai changer la ligne "pixelCount++" par "img.setRGB(p.x, p.y, de la Couleur.VERT.getRGB());" et c'est tout! Je suis très reconnaissante!! Merci beaucoup!
Magnifique, je ne sais pas comment je n'avais pas pensé à cette solution. Fonctionné sans problème dans mon code!
OriginalL'auteur Gant
voici ma mise en œuvre de la base sur les infos de cette page et les autres se sont rassemblés sur le web (testé et de travail)
avoir du plaisir 😉
OriginalL'auteur fdsfdsfdsfds
Vous devez retourner le dernier de remplir la déclaration, en la transformant en une queue d'appel. Cela vous fera économiser de l'espace de pile.
Merci à vous deux!
OriginalL'auteur Puppy
Un point important dans le pot de peinture est si vous traitez des points de parcours en profondeur d'abord de l'étendue de la première. Parcours en profondeur d'abord est la solution originale que vous cherchez à l'aide d'une pile, de la largeur de la première sont des algorithmes indiqué ci-dessous à l'aide d'une file d'attente pour stocker point. La différence est importante lors du remplissage dans de grands espaces convexes. D'une ampleur première méthode stocke sur un parfaitement convexe zone à peu près le cercle de bord (ou de remplissage de pointe). Si vous utilisez un parcours en profondeur d'abord la méthode peut dans le pire des cas stocker chaque pixel de l'conxex de la zone, ce qui signifie que dans le pire des cas, un 1000x1000 image d'inondation rempli peut exiger 1000000 de la pile d'images.
OriginalL'auteur RolfS