$ sed '/\includegraphics/s/img[0-9]*/&.png/g' input
\includegraphics[width=0.49\textwidth]{img1.png}
\includegraphics{img2.png}
\subfloat{\includegraphics[width=0.3\textwidth]{img3.png}}
\subfloat{\includegraphics{img4.png}}
A expressão regular para a operação de substituição procura img seguido por qualquer número de dígitos (incluindo zero dígitos) e acrescenta .png ao final da correspondência.
Uma versão um pouco mais robusta, que só executará as chaves de substituição dentro :
$ sed '/\includegraphics/s/{\(img[0-9]*\)}/{.png}/g' input
\includegraphics[width=0.49\textwidth]{img1.png}
\includegraphics{img2.png}
\subfloat{\includegraphics[width=0.3\textwidth]{img3.png}}
\subfloat{\includegraphics{img4.png}}
Isso procura (por exemplo) {img3} em qualquer linha contendo \includegraphics , extrai img3 dele, acrescenta .png e recapitula que em novas chaves, para o {img3.png} desejado.