something like this maybe help
Code:
a=last
g_mask=mt_lut("x 128 >= 255 x 16 <= 0 x 16 - 255 * 112 / ? ?")
denoise=smdegrain ()
mt_merge(a,denoise,g_mask)
the effect is do denoise unconditionally if Y value > 128
gradually decrease the strength of denosing if Y value < 128
and do nothing if Y value < 16