I hate pages which change just as I am about to click. I once bought something on eBay because the page shifted just as I tried to click on the bid button. It put the Buy It Now button where I clicked, and I didn't notice it had happened. I ended up paying more than I intended to bid.
Where I put "100px" for width and height: change that for the largest possible size that (or a tiny bit bigger than) an image can be. Now, when the images are small, they will sit in the middle of the cell; when they are big; they will fill the cell.
If you dislike tables for any reason; there's probably a hacky solution with auto-margins; but this is one of those case where, in my opinion, table is best.
It's not an incorrect use for a table; you want a row of columns of buttons - this is a tabular arrangement.
Tables are the only element that supports vertical alignment, which is why I suggest them. However; you might get something like what you want using a line of div elements, with CSS like:
/* same as before; replace 100px with the maximum size of your image */
/* this selector will apply to any image inside a div of class align_center */
margin: auto auto auto auto;
Effectively; you'll be doing the same thing (you have to put each image into a div with class align_center)
If you want them aligned to the center of that bottom frame; you'll have to put them into another div (with a defined width) and set that to have margin left, margin right as auto.
Up to you really. I don't think anyone could rightfully say you were lazy for using tables for this. I think frames are lazier than tables =P
BUT I don't mind frames. They fulfil a purpose; if you need that purpose, it's not lazy to use something pre-existing.