I thought head_local is relative to its parent, and head is relative to the world.
Finally the code is simple.
ama = bpy.data.objects['Armature']
matg = ama.matrix_world.copy()
for obj in bpy.data.objects:
if obj.type == 'ARMATURE':
bones = obj.data.bones;
for ab in bones:
pt_head_global = matg * ab.head_local
pt_tail_global = matg * ab.tail_local