Matlab 自动提取不规则圆周数据点代码 - 曲率分析
以下是一个示例代码,可以自动提取已存在的不规则圆周上的几个数据点:
% 读入图像
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 函数计算圆周上每个点的曲率,并分别找出曲率最大、最小以及绝对值最大的点。最后,输出这些点的坐标并绘制圆周和标记点。
原文地址: https://www.cveoy.top/t/topic/f1aq 著作权归作者所有。请勿转载和采集!