[ACCEPTED]-One dimensional edge detection-edge-detection

Accepted answer
Score: 10

One way to get to your desired result is 17 to adapt the 2D Canny edge detector as follows 16 (code in Mathematica):

First, compute the 15 spatial derivative using a Gaussian derivative 14 filter, setting the sigma value relative 13 to the scale of the edges you want to detect. Take 12 the absolute value of the result.

d = Abs@GaussianFilter[data, {{10, 5}}, 1];

Then, determine 11 a threshold automatically to cluster the 10 previous derivative values in two groups 9 (here using Otsu's method).

thrd = FindThreshold[d];

Then, detect 8 the steps of the derivative values (transitions 7 into/from the "dead band").

steps = Flatten@Image`StepDetect[d, thrd]["NonzeroPositions"];

At this point 6 you have the ends of the edges:

ListLinePlot[data, Epilog -> {Red, PointSize[Large], Map[Point[{#, data[[#]]}] &, steps]}]

enter image description here

Optionally--it 5 seems that's what you'd like--keep only 4 the lowest ends of the edges. Clustering 3 the data points at the ends of the edges 2 works in this case, but I'm not sure how 1 robust it is.

t = FindThreshold@data[[steps]];
steps2 = Select[steps, data[[#]] <= t &];

ListLinePlot[data, Epilog -> {Red, PointSize[Large], Map[Point[{#, data[[#]]}] &, steps2]}]

enter image description here

Score: 2

Given the nice contrast of these edges, there 9 is an easy solution that will work robustly: detect 8 all monotonous sequences of pixel values 7 (strictly increasing or decreasing). You 6 will keep the sequences having a total height 5 above a threshold (50 in your case) to reject 4 the noisy peaks.

As a byproduct, you'll get 3 the starting and ending points (not exactly 2 where you expect them though, but this can 1 be improved on if needed).

Barcodes ?

Score: 1

So you are looking for a particular change 5 in slope - ie a certain change in Y per 4 sample?

Isn't it simply look at the difference 3 in Y between two samples and if it's absolute 2 value changed by more than some limit mark 1 that as an edge?

More Related questions