1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
|
This is a log file created for the "Texturize" plugin for the GIMP.
Since this plugin is the result of a project for a Computer Vision
course in a French university (and since its LOG file shouldn't be useful
for anybody except the two students who worked on this project), this
file is written in French.
Ceci est le fichier de LOG de la cration du greffon "Texturize". Les
changements sont dans l'ordre chronologique inverse.
############################ ###########################
############################ 2005/02/01 ###########################
############################ ###########################
+ Ralisation de la page web ddie au plugin.
+ Nettoyage global du code (versions prcdentes, dbuggage).
+ Finalisation de la traduction en franais.
+ Nettoyage de graphcut.cpp. Les lignes sont moins longues
(mais toujours plus que 80 caractres).
############################ ###########################
############################ 2005/01/31 ###########################
############################ ###########################
* On affiche un message d'erreur quand on rencontre une image avec une
couche alpha (au lieu de traiter l'image tout de mme, incorrectement).
* Retour la version prcdente de la barre de progression.
+* La page web du plugin commence s'toffer de quelques explications,
d'exemples et d'une capture d'cran.
+ Le patch et l'image final sont dsormais des guchar*
(et non des guchar***). Le greffon tourne environ 5 fois plus vite.
J'ai donc enlev la recommandation d'aller boire un caf :-)
+ Le poids d'une arrte tient compte du gradient local : le greffon
coupe maintenant prfrentiellement le long des bords des objets.
+ L'image finale n'est plus initialise en blanc. Le code est toujours
prsent pour les prochaines sessions de dbuggage.
############################ ###########################
############################ 2005/01/30 ###########################
############################ ###########################
+ La barre de progression est plus rgulire (on utilise l'ordonne du
dernier pixel rempli au lieu du pourcentages de pixels remplis).
############################ ###########################
############################ 2005/01/29 ###########################
############################ ###########################
+ La coupe min tient dsormais compte des anciennes coupes, mme sur la
premire passe (remplissage de l'image avant de chercher cacher les
mauvaises coutures).
+ rempli est maintenant un guchar** (et non un int**).
+ Nettoyage de offset.c.
############################ ###########################
############################ 2005/01/27 ###########################
############################ ###########################
+ J'ai (pniblement) ajout la dtermination de la coupe de poids
minimal. La construction des sommets est une petite horreur de gestion
des indices si l'on tente de rester propre.
+ Corrig un bug pour que la taille par dfaut de la nouvelle image soit
par dfaut 2 fois la taille de l'image initiale, mme si on ne touche
pas la bote de dialogue.
############################ ###########################
############################ 2005/01/25 ###########################
############################ ###########################
+ Rationalisation des noms des variables. Celles concernant l'image
d'origine (le "patch") se terminent par _p, celle concernant l'image
finale par _i.
Corrig le bug qui faisait coller les patch du haut tous la mme
ordonne (ie colls contre le bord). Maintenant ils peuvent dborder.
+* Journe de travail deux physiquement ct. Nettoyages divers dans
le code.
############################ ###########################
############################ 2005/01/18 ###########################
############################ ###########################
* C'est bon, l'offset marche ! J'ai aussi implment la mthode de JB
qui consiste non plus remplir l'image ligne par ligne mais remplir
toujours partir du pixel vide le plus en haut gauche :
effectivement, a marche mieux ! Bon, on approche du but, mais il reste
encore les graph cut implmenter (ou plutt faire le lien avec le code
dj disponible) et essayer de se souvenir des coutures dj faites
(a, ce sera le plus chaud).
############################ ###########################
############################ 2005/01/16 ###########################
############################ ###########################
* J'ai commenc implmenter la fonction d'offset (ajout du fichier
offset.c). C'est un calcul bte et mchant de similarit entre deux
images (somme des diffrences de chaque couple de pixel, en valeur
absolue). Mais il y a pas mal de sous-cas traiter pour vrifier qu'on
ne fait pas de segmentation fault, qu'on ne sort pas de l'image, etc.
############################ ###########################
############################ 2005/01/15 ###########################
############################ ###########################
* Voil, ce stade j'ai un greffon qui ne fait rien de super intressant
(il se contente de rpter l'image de dpart jusqu' remplir la nouvelle
image) mais dont le rsultat est propre, qui marche aussi pour de trs
grandes images et qui affiche une belle barre de progression. Demain,
j'essaierai de trouver du temps pour rendre la fonction "offset" plus
intressante (calcul des corrlations, ie du produit de convolution, en
fait).
* La fonction gimp_pixel_rgn_set_rect, qui sert placer une zone de
mmoire dans un rectangle de l'image, n'est pas trs fute : on lui dit
quel rectangle de l'image de destination il faut mettre jour, mais si
la zone de mmoire n'a pas exactement la mme taille, il essaie quand
mme de placer tous les pixels et a fait du coup des effets bizarres
(les sortes de distorsions que j'observais tout l'heure). Il faut donc
chaque fois tronquer la zone de mmoire en fonction de la zone de
l'image de destination qu'on va occuper. C'est rpar.
* J'ai ajout une barre de progression qui renseigne sur le traitement
de l'image : a fait plus classe :)
* La plupart des fonctions utiles sont poses, mais encore l'tat
d'esquisse. Ce que fait le greffon pour l'instant, c'est simplement
recopier l'image de dpart dans la nouvelle jusqu' remplissage total.
Il y a des distorsions curieuses droit de l'image, il faut que je
rgle a. Prochaine grande tape : faire une fonction de calcul d'offset
intelligente.
* Maintenant que les basses sont bien poses et que je comprends comment
interagir avec le Gimp, a devient un peu plus amusant :) Je commence
poser les bases des fonctions dont j'aurai besoin, les diffrentes
boucles, l'architecture du projet.
* En plus de placer l'image de dpart en (0,0), je colore le reste en
tout blanc pour partir sur un bon point de dpart (sinon les autres
pixels sont alatoires et c'est un peu dgueu). a t l'occasion de
comprendre ( la dure, et avec moult essais/erreurs) comment sont
organises les structures de donnes qui reprsentent des images : o
sont les deux coordonnes, o sont les canaux de couleur. Bref, encore
une fois ce n'tait pas du tout, mais vraiment pas du tout document ni
expliqu nulle part, donc il m'a fallu un certain nombre d'essais et
d'images immondes pour comprendre comment a marchait, et avant
d'arriver faire du blanc bien pur !
* J'ai trouv le problme : je travaillais sur une image GIF, couleurs
indexes (qui provenait d'ailleurs de la page web de l'article sur
lequel on se base). L'algo serait cens marcher pour tous les types
d'images (je gre un nombre de canaux quelconque), mais ici a ne
marche pas, je ne sais pas pourquoi. J'ai donc mis un message d'erreur
quand on essaie d'appliquer le greffon sur une image couleurs indexes,
je ne vois pas comment rsoudre le problme pour l'instant.
* J'ai donc bien une nouvelle image qui s'ouvre, mais j'ai maintenant
des problmes pour rcuprer les donnes de l'image de dpart et les
refourguer la nouvelle. Plus prcisment, j'arrive rcuprer les
donnes (en les affichant avec des printf, c'est bon), mais je n'arrive
pas les remettre dans la nouvelle image. La gestion de la mmoire
n'est vraiment pas trs sympa : si on veut aller chercher les pixels
dans un rectangle de mmoire, c'est base de tableau[i*taille_ligne +
j*taille_colonne + k] avec k variant de 0 au nombre de canaux (RGB,
etc.). Il y a bien des procdures toutes faites pour lire un
rectangle d'une rgion initialise, et l'crire dans une autre, mais la
gestion de la mmoire derrire est telle que ce n'est vraiment pas
vident de savoir quel type de zone mmoire il faut utiliser pour
stocker ces donnes (a, a marche pour l'instant) et donner manger
la procdure d'criture (a, a ne marche pas)... Je sens que je vais
m'emptrer dans les pointeurs et les malloc exotiques :-p
############################ ###########################
############################ 2005/01/14 ###########################
############################ ###########################
* Dernire modification de la journe : j'ai finalement choisi de demander
Gimp d'ouvrir une nouvelle image, au lieu de m'emmerder avec l'image
actuelle. C'tait vraiment une journe galre, j'ai un peu pt les
plombs, et tout a n'est vraiment pas bien document (probablement
cause de la nouvelle version -- 2.2 -- qui vient de sortir). J'essaierai
de faire un bon tutoriel d'criture d'un greffon Gimp, a manque
*vraiment*. J'ai donc implment mon ide d'ouvrir une nouvelle image
avec directement la bonne taille, c'est un peu plus subtil coder mais
a marche : pour l'instant une nouvelle image (toute noire) s'ouvre.
* Bon, la compilation remarche (automake, autoconf, etc., c'est bon).
Mais pour une raison que je ne comprends pas, il ne veut absolument pas
me laisser crire en C++ un fichier dj prsent dans l'archive (le
fichier render.c que j'ai essay de renommer en render.cpp), mme en
changeant tout ce qu'il faut dans les Makefile et autre configure.in...
Bon, ben il faudra que je me passe du C++ pour ce fichier-l, j'ai dj
pass trop de temps essayer de lui faire manger mon render.cpp, sans
succs.
* Les fichiers qui calculent le flot max (ou la coupe de poids min) sont
en C++ alors que le greffon est fait pour tre programm en C. J'ai
pass beaucoup de temps changer ce qu'il faut (et comprendre quoi
changer !) dans les fichiers configure.in, Makefile.am, etc. C'est
compliqu ces trucs-l, et automake, autoconf sont encore bien obscurs
pour moi (sans compter le script autogen.sh inclus dans le
template). Bref, pour que a marche chez tout le monde quand on fait
./configure && make && make install, y a toute une machinerie derrire,
trs complexe, et j'ai un peu les doigts coincs dedans :)
* Ce qui est vraiment difficile, c'est qu'aucun des greffons que j'ai
trouvs (y compris tous les greffons livrs avec The Gimp) ne
redimensionnent l'image de dpart : l'image d'arrive a exactement la
mme taille. Or c'est la principale difficult laquelle je suis
confront : le redimensionnement apporte des problmes d'initialisation
des "drawable" que j'essaie de rsoudre par plusieurs moyens
(agrandissement de l'image pour ensuite effacer des pixels,
agrandissement de l'image mais en gardant l'original dans un coin --
dans ce dernier cas j'ai un mal fou demander Gimp de me laisser
crire dans les autres pixels, etc.), mais pour l'instant sans succs.
############################ ###########################
############################ 2005/01/13 ###########################
############################ ###########################
* J'ai pass pas mal de temps pour comprendre comment marchaient les
choses sous Gimp (et je n'ai pas fini !). Bref, j'ai enfin russi
demander mon greffon de redimensionner l'image (il faut aller fouiller
dans les librairies de Gimp, c'est mal document, la doc correspond
une version antrieure et plein de trucs ont chang depuis... bref ce
n'est pas vident).
############################ ###########################
############################ 2005/01/11 ###########################
############################ ###########################
* Je cre le fichier "texturize.h" pour regrouper le prototype de toutes
les fonctions et les trucs communs tous les fichiers source (en
particulier pour faire le lien entre le greffon lui-mme et l'algo de
graph cut que j'utilise).
* Il y a aussi les problmes d'internationalisation : dans le
sous-dossier "po", il y a la traduction de tous les messages dans plein
de langues. Je vais faire l'anglais (fichier de dpart) et le franais.
* Je modifie la fentre de dialogue de base (avec plein d'exemples de
curseurs) pour mettre juste la taille de la nouvelle image et poser la
bonne question. J'enlve les dfinitions de variables inutiles.
* J'inclus les sources de "maxflow" (algo de calcul du flot max) dans
le rpertoire du greffon ; je mets les deux sous-rpertoires
(adjacency-list et forward-star) et je fais des liens symboliques vers
les lments de adjacency-list (c'est le plus gourmand en RAM, mais le
plus rapide). Je compile... Ah, c'est du code C++ donc j'installe le
paquet g++, je recompile... C'est bon, il fallait ajouter la ligne
"AC_PROG_CXX" au fichier configure.in. Je ne pige pas trop comment
fonctionne automake, configure, etc. mais maintenant que a marche, je
ne touche plus :)
############################ ###########################
############################ 2005/01/07 ###########################
############################ ###########################
* Pour commencer me familiariser avec la structure des fichiers
main.c, render.c, interface.c, etc., je change dj les textes de
faade (nom du greffon, nom des auteurs, etc.). Je commence voir un
peu comment a marche.
* a ne fonctionne toujours pas (./config rle : ma version de GIMP est
trop ancienne). J'installe donc tous ces paquets (et gimp) en version
unstable. Bon, a va mieux : j'ai fait ./configure, make, sudo make
install et tout va bien. Le nouveau greffon "plug-in template" apparat
bien dans la loiste des plug-ins disponibles, dans le GIMP, avec un
exemple de bote de dialogue trs bien fait.
* Installation de plusieurs paquets lis au dveloppement sous GIMP (je
ne sais pas lesquels sont vraiment utiles mais a ne marchait pas dans
au moins l'un d'entre eux) :
sudo apt-get install libgimp2.0-dev libglib2.0-dev libgtk1.2-dev
libgtkgl2.0-dev
* J'ai commenc par changer la licence (donne dans le fichier COPYING)
en la GPL, un peu plus adapte notre projet, il me semble.
* J'ai donc tlcharg le "plugin template" depuis le site officiel des
dveloppeurs de GIMP.
LocalWords: guchar dbuggage offset.c ie JB fault gimp rgn rect
LocalWords: printf RGB malloc
|