I believe the critical point of confusion came from the interpretation of tagging in step 3.
As given:
Step 3: Tag the northeast corner of each component of C; call these
points Tne. This prepares to identify the regions of M which restrit the
passage of S(3) by finding the breaks in C.
My original interpretation was that we tag the corner at the cell position where the corner occurred --- and I believe that's what led us astray. It looks like we get the correct result if we place the tag pixel to the NE of the NE corner (NW of the NW corner in step 5).
So, now we'll go back over the example (and another one for sanity check) with this new interpretation.
So, here's the algorithm again with clarifications for the new interpretation.
Just for a reminder, here's the running example set of patterns.
We start by doing an erode on the pattern as the first step of the open.
Then we dilate the erosion in order to get the open.
Finally, we diff the mask and the open to complete step 1. This gives us the easy width errors, but doesn't catch the narrow diagonal necks.
We erode again in step 2, but we already saw that result. Then we tag in step 5 (this example is a NW-SE error).
n.b. The tagging is placed to the NW of the leading corner. (I also think there's some room for ambiguity in what constitutes a NW (NE) corner, but I'm assuming here that one makes the decision based on local (cellular) information. This results in finding two NE corners on the H-pattern in this example.)
Now, we dilate the corner tag in step 6, and look at what the dilated corner intersects. This time, we see it does intersect the disconnected diagonal segment and finds the error.
As a sanity check, here are several cases of diagonal necking, showing that this does find errors (and doesn't signal false errors).