Decimate only "bad" objects in a scene
This script:

import bpy, bmesh

THR = 4  # &lt;-- the only parameter. The smaller, the stricter

for element in bpy.data.objects:
    if element.type != "MESH": continue

    # reset
    for m in element.modifiers:
        if m.name == 'ScriptedDecimate':
            element.modifiers.remove(m)

    # scoring function
    vert = len(element.data.vertices)
    areabbox = (element.dimensions.x*element.dimensions.y
               + element.dimensions.y*element.dimensions.z
               + element.dimensions.x*element.dimensions.z)*2
    indicator = vert/areabbox

    # select and decimate!
    if (indicator &gt; THR):
        element.select=True
        decimator = element.modifiers.new("ScriptedDecimate", type = "DECIMATE")
        decimator.ratio = (THR/indicator)**(2/3)
        bpy.context.scene.update()
    else:
        element.select=False


can be useful. 

It creates a Decimate modifier for each element where the number of vertices, divided by the surface area of the bounding box, is greater than a set threshold THR. It also adds these object to your selection (and removes all the unaffected meshes). It resets its actions every time you run it again (to avoid double modifiers).

The Decimate Ratio depends on "how far" the original vertex count per area was from the threshold (but it doesn't try to decimate it right to the point where it doesn't exceed the threshold!).



↑↑&nbsp;&nbsp;&nbsp;verts, faces (tris): 6171, 7182 (12218) → 1743, 2601 (3374)