|
Publicité | ||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 210 ![]() |
Suite a une discussion ouverte sur le sujet du seamcarving, j'ai écrit un petit bout de code qui permet de diminuer la hauteur d'une image en utilisant la methode du chemin de moindre energie:
Code java :
![]() version binaire (jar) Promu@ld : sources
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. Dernière modification par PRomu@ld ; 31/12/2010 à 10h40. Motif: Ajout des sources |
||
|
00
|
|
|
#2 |
|
Membre chevronné
![]() ![]() Inscription : juin 2004 Messages : 1 389 ![]() |
Intéressant, et rapide (par rapport à l'autre, donné dans la discussion).
As-tu profilé ton code ? Sais-tu ce qui consomme le plus ? La récupération des valeurs de l'image et la conversion en tableau 2D doit être assez coûteuse, non ? |
|
|
00
|
|
|
#3 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 210 ![]() |
Citation:
![]() Quand a la conversion image/tableau, meme si elle est couteuse, je ne la fait qu'au début et a la fin de l'algo (et de temps en temps au milieu pour afficher les résultats intermediaires). Mais, au final, le décalage de tableau par System.arraycopy est bcp plus rapide que de decaler un par un tous les pixels de l'image avec un boucle for: c'etait ce que j'avais fait en premier, et pour des raisons de performance je suis passé par les tableau 2D.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 70 ![]() |
Ce n'est pas de la vrai programmation dynamique que tu fait: les lignes que tu élimine ne sont pas forcèment celles qui ont le moins d'information. Chez moi pour la réduction verticale je rempli la première colonne d'un tableau 2D totalEnergie avec les gradients des pixels correspondants. Puis pour les colonnes suivantes je met dans chaque case totalEnergie[i][j] la valeur gradient(i,j) + min(totalEnergie[i - 1][j], min(totalEnergie[i - 1][j - 1], totalEnergie[i - 1][j + 1]))
Ensuite je cherche dans la derniere colonne la plus petite energie et à partir de là je vais de la droite vers la gauche construire le chemin. C'est plus coûteux que ta méthode (enfin il doit y avoir moyen d'optimiser) et le résultat et un peu différent, plus réaliste je trouve. (j'ai testé avec ton image) |
|
|
00
|
|
|
#5 |
![]() ![]() Romuald PerrotAttaché Temporaire d'Enseignement et de Recherche (ATER) Inscription : avril 2005 Messages : 4 141 ![]() |
Tu peux nous poster ton image de résultat (histoire de comparer)
Dans le papier original, c'est qu'est ce qui est utilisé ?
__________________
http://rperrot.developpez.com http://phos-graphein.fr Vous désirez contribuer à la rubrique algorithmique, n'hésitez pas à me contacter. |
|
|
00
|
|
|
#6 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 210 ![]() |
@FrenchFrogger: Sauf bug dans mon code je fais la meme chose que toi,sauf que mes lignes de basse energie vont de gauche à droite, et toi de droite à gauche. A la vue de l'image de test, c'est peut-etre de là que vient l'amélioration.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 70 ![]() |
Enfin, moi je crée un tableau largeur x hauteur, dans la premiere colonne je met les gradients, dans les colonnes suivantes j'applique la formule du pdf (M(i,j) = e(i,j) + min(M(i−1, j−1),M(i−1, j),M(i−1, j+1))
J'ai pas l'impression que vous vous y prenez de la même façon, mais peut-être que je me trompe. Est-ce que vous savez comment faire un agrandissement "beau"? J'ai beau essayé (gradient Sobel) en ajoutant à chaque fois ligne de basse energie différente des précédentes, ça me donne une image moins moche que l'image B du dauphin dans le pdf officiel, mais pas beaucoup mieux non plus... |
|
|
00
|
|
|
#8 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 210 ![]() |
Citation:
http://xphilipp.developpez.com/contribuez/sea.png Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
00
|
Copyright © 2000-2012 - www.developpez.com