The denoiser already uses normals and albedo passes for this kind of thing. While it may be tempting to try to separate individual objects/geometry and denoise each on their own, separating a render into such zones is not necessarily better than a more loose identification of similar pixels. Because discontinuities exist within objects, and continuities exist across objects.
You can also get much better results by denoising direct and indirect light separately. This is because indirect pass contains most of the noise and has much smaller brightness range. You can even get away without denoising the direct pass at all (also avoiding OID blurriness). It would be great to have an option in Cycles to output exactly these two passes).