I think the algorithm is probably incorrect. A number starting with 0 should be treated lexically not numerically. Otherwise you have a situation where img_1_01.jpg and img_01_1.jpg does not have a complete ordering.
The issue here is that one camera appends milliseconds to the seconds without a separator, and the other uses a separator.
So of course the ones that include milliseconds look like bigger numbers and get sorted last.
Leading zeros aren't the issue here.
(Good) "natural sort" implementations generally have ways of handling ties like this. It's similar to the problem of case-insensitive sort over case sensitive sets.