ViewState is fine. You are using different case for your ViewState index string, so they don't refer to the same ViewState property. "Img1" is not equal to "img1".
ViewState["Img1"] != null)
{
Image2.ImageUrl = (string)ViewState["img1"];
I recommend either using a constant for the value name, as below.
const string image1 = "img1";
const string image2 = "img2";
const string image3 = "img3";
const string image4 = "img4";
Or refer to my blog post to create strongly-typed pseudo-properties using extension methods. http://coding.grax.com/2013/06/simple-strongly-typed-pattern-for.html