I think that's the best I can get. The raw image is ~90MB, and the picture 1 is jpg compressed (~5MB). And the Picture 2 is decoded from picture 1.
For this picture, I only modified Y channel, since UV channel will affect the color and 8x8 block with "wrong" color is super sus.
Also, the way I hide bits into S matrix of SVD is a kind of quantization. With d = 46, bit 0 is `[floor(v / d) + 0.25] * d`, and bit 1 is `[floor(v / d) + 0.75] * d`. A bigger d will result banding and low picture quality. But smaller d won't encode info well.