I will detail my own approach below. If you have a great deal of pages, it will be a bit cumbersome, but it has worked well on my projects with 20 or fewer pages. It's not "programmatic" at all, but has the advantage that after you're done, a non-programmer can figure out how to replace/move pictures
Create a content type called Top Image, add a single imagefield to it, and set it do full display. (Add resizing rules with imagecache as necessary)
Create a "Top image" for each image you want, and upload the images, one to each node.
Use panels to create a block from each node.
Assign the blocks to "Display only on pages xxx", and put all blocks into the appropriate region.
On a related note: From a management position, it would be nice with a view that listed all these nodes and their block settings, but I don't know how to get the block settings into a view.