5

We need to separate the concept of edge detection from the tools we use to apply the procedure. Edges are local property of the image. Being so local means we don't analyze the image in frequency domain but in spatial domain. Yet, a common step for edge detection is applying High Pass / Gradient Filter. Since those are Linear Shift Invariant operators we may ...


4

I ran the following code: clear(); close('all'); mI = im2double(imread('bCfdb.png')); %<! Loading the image vBlurStd = [0, 0.1, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]; mII = sum(cat(3, 0.299, 0.587, 0.114) .* mI, 3); %<! Y (Luminosity like channel) hFigure = figure('Position', [100, 100, 1200, 900]); hTiledChartLayout = tiledlayout(3, 3); kk = 0; for ii =...


2

If it helps, try a simpler version. Just look at two neighbouring pixels in a row. First example: There is 10 and 10. Difference between them is 0, no difference, no edge. Second example: In the middle, there is 10 and 0. Difference is -10 because it drops from 10 to 0. There is a step of -10, that must be an edge. The 3x3 kernel just takes the source pixel ...


1

This should be doable with ssqueezepy's extract_ridges; try varying penalty and bw (see their docstrings). As last resort, feeding a cropped image that excludes region without ridges may work better, as the algorithm assumes the ridge spans the entire frame. You can automate this by finding indices at which column energies fall below a set threshold, e.g. np....


1

Instead of using a homegrown amalgamation of algorithms, I suggest you look in the scientific literature for existing solutions. People have solved the same problem over and over again, there exist many algorithms to detect lines. One very popular such method is Frangi's vesselness measure (A.F. Frangi et al, “Multiscale Vessel Enhancement Filtering”, MICCAI ...


Only top voted, non community-wiki answers of a minimum length are eligible