A simple method would be to try the following:
1) Get rid of the outliers in your output image (like that one lone blue cross at the top middle/left). You could do this by getting the mean/std dev for the location of each point. Any point further than 3*sigma in terms of it's distance from the mean location could be an outlier. Or you could just have multiple clusters of garbage.
2) Create a mask image full of zeros that is the same size as the input (not color though). If Iin is color, then:
Imask = zeros(size(rgb2gray(Iin)));
If Iin is grayscale, then:
Imask = zeros(size(Iin));
3) At each (x,y) point in the image contained within the SIFT output, set Imask(y,x) (the dimensions are flipped for images since it is a matrix) equal to 1. This would give you a logical mask of where the SIFT points are located.
4) You can then do a convex hull and get the area that way. Or you might use morphological operations such as 'imdilate', 'imerode', 'imopen' and 'imclose' to grow the cluster of points and defragment the region. There are other methods too, but the objective here would be to get solid clusters encompassing all the garbage. A convex hull might get extra area and throw your numbers off (consider a cluster of garbage shaped like an 'S' or 'C', both would end up looking like oval or circular shapes after a convex hull.
5) Use 'regionprops' if you have multiple clusters and you want to know their individual areas. If you just want to know the total area in the image where garbage exists, you can just sum up all pixels in the 'Imask' image:
totalGarbage = sum(sum(Imask))