These are the two approaches I have taken

img (* sample image *)
f[arg_Image] := Log[1 + #^2] & /@ ImageData[arg]
lwd = LiftingWaveletTransform[img, BiorthogonalSplineWavelet[1, 3], 3, Padding -> 0,
Method -> "IntegerLifting"]
lwdcoeffs = lwd[All, {"Image", "ImageFunction" -> ImageAdjust, ImageSize -> 120}];
(* We scale the coefficients; Log[1 + coefficient^2] *)
lwdlogcoeffs = First@# -> Image@f[Last@#] & /@ lwdcoeffs;
(* And now invert the transform but with a higher order wavelet *)
(* While retaining the 50 largest coefficients *)
InverseWaveletTransform[WaveletThreshold[DiscreteWaveletData[lwdlogcoeffs,
BiorthogonalSplineWavelet[2, 2], LiftingWaveletTransform],
{"LargestCoefficients", 50}]] // ImageAdjust

transformedlwdcoeffs = MapThread[#1[[1]] -> Binarize[GaussianFilter[DistanceTransform[#1[[2]]], 1,
{2, 2}]] &, {lwdcoeffs}]

Eh, not too shabby - we will use this as a mask
(* Extract the coefficients we are interested in *)
mask = First /@ lwd[{___, 0}]
(* True if it is a coefficient we are going to use; False - otherwise *)
flags = Thread[Map[MemberQ[mask, #1] &, First /@ lwdcoeffs]];
(* Multiply the mask and the original coefficients while using flags as an indicator *)
lwdobject = MapThread[If[#1[[1]] == #2[[1]] && #3,
#1[[1]] -> ImageMultiply[#1[[2]], #2[[2]]],
#1[[1]] -> #1[[2]]] &, {lwdcoeffs, transformedlwdcoeffs, flags}];
(* Now invert the transform *)
InverseWaveletTransform[DiscreteWaveletData[lwdobject,
BiorthogonalSplineWavelet[3, 1], LiftingWaveletTransform]] // ImageAdjust

It's far from perfect, but I think it is a proof of concept.
You can also filter based on the histograms of the image and the LiftingWaveletTransform
coefficients
