Extracting points for sharp curvature from signed distance function array

3 次查看(过去 30 天)
I have a signed distance array, extracted from a black-and-white bitmap. The shape described by the bitmap is arbitrary, and could contain concave or convex curvature of varying scales. I am interested in extracting the position of corners that are sharper than a certain amount. I'm frankly not sure how to define that sharpness here; what I care about is 'shoving' a circle of a defined radius into that corner, and for the corner in total to be larger than that circle (in other words, I don't want it reporting every single rasterisation of the bitmap):
  1. identifying if any convex curvatures' radius is less a code-defined radius of curvature limit
  2. calculating what coordinate in the bitmap represents the centrepoint of the code-defined radius of curvature limit for that corner, and then
  3. to list any and all found sets of centerpoint coordinates in an array of format T= [x1, y1; x2, y2; .... xn, yn].
I'm obtaining my distance array and interpolation function as follows.
X = imread("MeshTest01.bmp"); %load logical (1 or 0) bitmap
A = imrotate(X,-90);
E=edge(A); % Edge finding of bitmap
DistE = bwdist(E, "euclidean"); % signed distance function from edge
DistA = bwdist(A, "euclidean"); % signed distance function from whitespace
D = DistE-2*DistA % Pixel-enumerative distance for signed distance function from material (outside is positive)
D = double(D); %make array forced to Double so interpolation works correctly
Fi = griddedInterpolant(D,'linear')
fd=@(p) Fi(p); %defining the interpolation function call

回答(1 个)

Supraja
Supraja 2023-5-5
You can use ‘ischange()’ function which detects abrupt changes in data.
The detailed documentation link for the same is given here: https://www.mathworks.com/help/matlab/ref/ischange.html?searchHighlight=ischange%20function&s_tid=srchtitle_ischange%20function_1
The sample code to use this function is as shown below:
f = @(x) 1-(x./sqrt(1+x.^2)); % Create Function
x = linspace(-10, 10);
y = f(x);
changes = ischange(y, 'linear', 'SamplePoints', x);
plot(x, y, '-', x(changes), y(changes), 'gp')
grid on
axis('equal')
xlim([-2.5 2.5])

类别

Help CenterFile Exchange 中查找有关 Feature Detection and Extraction 的更多信息

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by