以下是一个示例代码,可以自动提取已存在的不规则圆周上的几个数据点:

% 读入图像
img = imread('circle.jpg');
% 转为灰度图像
gray_img = rgb2gray(img);
% 二值化
bw_img = imbinarize(gray_img);

% 提取边界
boundary = bwboundaries(bw_img);

% 获取第一个边界
boundary = boundary{1};

% 计算边界点的曲率
k = curvature(boundary(:,1), boundary(:,2));

% 找到曲率最大的点
[max_k, max_idx] = max(k);

% 找到曲率最小的点
[min_k, min_idx] = min(k);

% 找到曲率绝对值最大的点
[abs_max_k, abs_max_idx] = max(abs(k));

% 输出结果
fprintf('最大曲率点:(%d, %d)
', boundary(max_idx, 2), boundary(max_idx, 1));
fprintf('最小曲率点:(%d, %d)
', boundary(min_idx, 2), boundary(min_idx, 1));
fprintf('绝对值最大曲率点:(%d, %d)
', boundary(abs_max_idx, 2), boundary(abs_max_idx, 1));

% 绘制边界和标记点
imshow(img);
hold on;
plot(boundary(:,2), boundary(:,1), 'g');
plot(boundary(max_idx, 2), boundary(max_idx, 1), 'r*');
plot(boundary(min_idx, 2), boundary(min_idx, 1), 'r*');
plot(boundary(abs_max_idx, 2), boundary(abs_max_idx, 1), 'r*');

% 计算曲率的函数
function k = curvature(x, y)
    dx = gradient(x);
    dy = gradient(y);
    d2x = gradient(dx);
    d2y = gradient(dy);
    k = (dx .* d2y - dy .* d2x) ./ (dx.^2 + dy.^2).^1.5;
end

该代码首先读取图像,并将其转换为灰度图像并进行二值化。然后使用 bwboundaries 函数提取图像边界,并选取第一个边界作为目标圆周。接着,自定义 curvature 函数计算圆周上每个点的曲率,并分别找出曲率最大、最小以及绝对值最大的点。最后,输出这些点的坐标并绘制圆周和标记点。

Matlab 自动提取不规则圆周数据点代码 - 曲率分析

原文地址: https://www.cveoy.top/t/topic/f1aq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录