# Intersection & Complement operations for lists of Morphological Components?

I have an array of $M$ sets of morphological components corresponding to the same image, however computed in different ways. For example, we might have:

     M = Array[{} &, 4];

t1 = 0.1;
t2 = 0.2;
t3 = 0.5;

M[[1]] = WatershedComponents[image,t1];
M[[2]] = MorphologicalComponents[CrossingDetect[image],t2, Method->"BoundingDisk"];
M[[3]] = MorphologicalComponents[image,t3, Method->"ConvexHull"];
M[[4]] = MorphologicalComponents[EdgeDetect[image],t1];


Is there a mechanism in Mathematica v9.0 that would allow me to create a function like:

    MorphologicalComponentNoIntersection[testComponentList,M]


Which will return a set of morphological components in testComponentList that nowhere intersect / overlap any of the components in the array of component lists $M$? Or, in the opposite manner, perhaps a list of components in testComponentList that intersect / overlap with each at least one component in each list of components in $M$?

I've used a different set of components to test with:

image = ExampleData[{"TestImage", "Lena"}]~ImageResize~150;
M = MorphologicalComponents[#, 0.5] & /@ ColorSeparate[image];
test = WatershedComponents[image];

Colorize /@ Join[M, {test}]


The intersecting components of test for each part of M are:

 intersections = DeleteCases[Union@Flatten[test Unitize@#], 0] & /@ M;


For the components in test which do not intersect any of the M:

SelectComponents[test, "Label", FreeQ[Union @@ intersections, #] &] // Colorize


For the components in test which intersect with all the M:

SelectComponents[test, "Label", MemberQ[Intersection @@ intersections, #] &] // Colorize


Brute force, not optimized:

t1 = 0.1;
t2 = 0.2;
t3 = 0.5;
image = ExampleData[{"TestImage", "Lena"}];

M = {WatershedComponents[image],
MorphologicalComponents[CrossingDetect[image], t2, Method -> "BoundingDisk"],
MorphologicalComponents[image, t3, Method -> "ConvexHull"],
MorphologicalComponents[EdgeDetect[image], t1]};

(* let's define a test components array*)
j = First@ImageDimensions@image;
test = Insert[Array[0 &, {j - 1, j}], Flatten@Table[Sequence@{i, i}, {i, j/2}], IntegerPart[j/2]];
(* intersect all *)
s = ((1 + #) & /@ (- Unitize /@ M));
inter = Times @@ Append[s, test];
(*Get the surviving elements*)
survElem = First /@ (Rest@Tally@Flatten@inter);
(*Let's see if the whole component survived*)
Table[If[Position[test, i] == Position[inter, i], i], {i, survElem}]

(* {2, 3, 4, 5, Null} *)