I am trying to do DWT steganography. I first obtain the DiscreteWaveletTransform
of the image as follows
dwd = DiscreteWaveletTransform[carrierImage, HaarWavelet[], 1]
(* Out: DiscreteWaveletData[<< DWT >>, < 1 >, {256, 256}] *)
This splits the image into four separate images that can be obtained with dwd[All, "Image"]
, but when I use those with InverseWaveletTransform
I get a blurred version of the original image. Why is it so?
MWE to recreate the problem:
img = ExampleData[{"TestImage", "Lena"}];
dwd = DiscreteWaveletTransform[img, HaarWavelet[], 1];
newdwd = DiscreteWaveletData[dwd[All, "Image"], HaarWavelet[], DiscreteWaveletTransform];
Row[{
Show[InverseWaveletTransform[newdwd], ImageSize -> 200],
Show[InverseWaveletTransform[dwd], ImageSize -> 200]
}]
For @JasonB it's even worse (image link copied from his comment):
DiscreteWaveletData
object before. If you compare the filesFullForm[dwd] >> "test1.txt"; FullForm[newdwd] >> "test2.txt";
you see that test1.txt is 889 lines longer... $\endgroup$ – Jason B. Mar 14 '16 at 16:19newdwd
is not a properly constructedDiscreteWaveletData
object. Trynewdwd["TreeView"]
andnewdwd[All, "Image"]
versusdwd["TreeView"]
anddwd[All, "Image"]
. Perhaps you could rephrase the question "How can I reconstruct a discrete wavelet data object from its constituent parts?" $\endgroup$ – Jason B. Mar 14 '16 at 16:30