非常抱歉再次给您带来困扰。我明白您的问题了:'regionprops' 函数需要二值图像作为输入,而不是轮廓的坐标点。

以下是正确的代码修改来计算轮廓的偏心率:

% 对轮廓进行筛选
for k = 1:length(noIslandContours)
    contour = noIslandContours{k};
    
    % 创建一个与图像大小相同的全黑图像
    binaryImage = false(size(image));
    
    % 将当前轮廓区域填充为白色
    binaryImage(sub2ind(size(image), contour(:,1), contour(:,2))) = true;
    
    % 对当前轮廓区域应用regionprops计算偏心率
    properties = regionprops(binaryImage, 'Eccentricity');
    eccentricity = properties.Eccentricity;
    
    % 计算周长、面积和角点数
    perimeter = length(contour);
    area = numel(contour);
    
    % 根据周长、面积、角点数和偏心率进行筛选
    if perimeter > minPerimeter && area < maxArea && area > minArea && perimeter < maxPerimeter && eccentricity >= minEccentricity && eccentricity <= maxEccentricity
        % 符合条件的轮廓处理
        % ...
    end
end

在此代码中,我们首先创建一个与图像大小相同的全黑二值图像。然后,将当前轮廓的坐标点标记为白色。接下来,我们将该二值图像应用于'regionprops'函数来计算轮廓的偏心率。最后,将偏心率与其他条件一起用于轮廓筛选。

请确保'noIslandContours'中的每个轮廓都是有效的轮廓坐标点,并且其坐标点的范围在图像尺寸内。

如果问题仍然存在,请提供更多关于'noIslandContours'和图像的详细信息,以便我能够更好地帮助您解决问题。再次对之前的错误回答表示诚挚的歉意。

如何使用regionprops计算轮廓的偏心率

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

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