I'm trying to implement a silhouette detection algorithm in post-processing. I've come across solutions based on Sobel/Roberts cross/... filters and I was wondering if there are more accurate techniques to perform the task.
With silhouette edge I mean those edges that are at the boundary between a front-facing and a back-facing triangle of a polygonal mesh with respect to the view direction.
One thing that is really important for my application is consistent silhouette thickness (so that I could inflate the output in later passes to reach a target width).
I am assuming a Sobel filter based approach on depth values (or similar) alone is not enough to consistently detect silhouettes (since it detects large enough discontinuities...that are oftentimes coincident with what we consider silhouettes). Is it true or a simple filter tweaked for this purpose could perform just fine?
Is there any other documented post-processing technique for silhouette detection?
I've been experimenting with the following approach:
This approach seems to work quite well, however, does it makes any sense to you? Am I re-inventing something that already exists?