As mentioned, the failsafe(?) method is to use SVG. For examples of captions on landscape illustrations, see
this book.
However, reader SVG support is a bit patchy...
Personally I stick to <div page-break-inside:avoid>, and scale the image so that there is room for the caption below for all sensible font magnifications. For large images you can also have a page-break-before:always.