Here is a vectorized implementation:
import torch

N, C, H, W = 8, 3, 50, 100

# Vectoried implementation
batch = torch.rand(N, C, H, W)
u, _, v = torch.svd(batch.view(-1, H, W))

s = u[:, :, 0, None].matmul(v[:, :, 0, None].transpose(2, 1)).view(N, C, H, W)

# Your current implementation
S = torch.zeros((N, C, H, W))
for i in range(N):
    Img = batch[i, :, :, :]
    for c in range(C):                
        U, _, V = torch.svd(Img[c])
        S[i, c] = U[:, 0].view(-1, 1).matmul(V[:, 0].view(1, -1))


# Verify the result
print(S.allclose(s)) # Prints True