On déclare les namespaces où on veut, et ils s'appliquent au nœud où ils sont déclarés ainsi que ses descendants. Et s'il faut redéclarer tes namespaces dans $img c'est justement parce qu'au moment où tu crées cet élément, il est en dehors du nœud où les namespaces sont déclarés, donc les préfixes utilisés ne correspondent à rien. Tu remarqueras également qu'une fois le nouveau nœud ajouté au document, les déclarations redondantes sont automatiquement supprimées.
À part ça, je ne crois pas que tu aies oublié quelque chose (à part sauter des lignes de temps à autres, ça fait pas de mal), si ça marche c'est que c'est bon ?