one possible approach (assumes you have DSM as raster, and no DTM).
I've tried this on a local park (Princes Street Gardens in Edinburgh). It's probably a bad example as it's not on a continuous slope, but is a U-shaped park with a deep square notch in the middle where the railway is. I haven't taken too much time with the settings.
Here's the original raster:-
SAGA DTM (Slope) filter. This spits out two rasters, bare earth (trees replaced with nodata) and removed objects (trees only, terrain replaced with nodata). You'll need to experiment with radius and slope settings for this to get good results.
use SAGA close gaps on the bare earth output. This will give a reasonable approximation to the underlying DTM, by interpolating pixels in the gaps where the trees were removed.
- use Raster Calculator to subtract the DTM from your original DSM. You now have a raster representing height above the underlying terrain, and the (sloped) treeless ground has values close to 0...
it's done a reasonable job picking out the trees, although it's also picked out a bridge and a building :) It seems the trees are around 18-20m high, which sounds about right.