Consider the first example in the documentation of CrossingDetect:
CrossingDetect[{4, 0, 1, -2, 1, -2, -3, -1, 3}] // Normal
Let's plot the list:
ListLinePlot[{4, 0, 1, -2, 1, -2, -3, -1, 3}]
The red line obviously crosses (strictly!) the $x$-axis at least four times. Why does the Mathematica return the following, with only three 1, and at the given positions?
ListLinePlot[{4, 0, 1, -2, 1, -2, -3, -1, 3}] // Normal
(* {0, 0, 1, 0, 1, 0, 0, 0, 1} *)

CrossingDetect"finds pixels [values in this case] with positive values that have at least one negative neighbor" -1on position 3 has;1at pos 5 has;3at pos 9 has - hence the output. So it finds points based on their neighbourhood, not crossings (that might happen between points, like here). – corey979 Sep 28 '16 at 17:02