基于之前的作品(https://www.mathworks.com/matlabcentral/answers/144559-centroid-contour-for-a-binary-image-containing-multiple-objects)我试图使用位于http://cs.mcgill.ca/~pcrane/的手势图像绘制轮廓距离
不幸的是,似乎我的情节不一样,有什么原因吗?计算错了吗?
我只展示了第一张图片。
非常感谢。
脚本:
clc;
clear;
RGB = imread('E:/00000.jpg');
I = rgb2gray(RGB);
binaryImage = imbinarize(I);
binaryImage = bwareaopen(binaryImage,30);
binaryImage = imfill(binaryImage,'holes');
imshow(binaryImage);
%[B,L] = bwboundaries(binaryImage,'noholes'); % no need
boundaries = bwboundaries(binaryImage);
measurements = regionprops(binaryImage, 'Centroid');
centroids = [measurements.Centroid];
% centroidx = centroids(1:2:end); % no need
% centroidy = centroids(2:2:end); % no need
centroidx = centroids(1);
centroidy = centroids(2);
numberOfBoundaries = size(boundaries, 1);
for k = 1 : numberOfBoundaries %in case that there are more objects
thisBoundary = boundaries{k};
boundaryx = thisBoundary(:, 2);
boundaryy = thisBoundary(:, 1);
plot(boundaryx, boundaryy, 'r-', 'LineWidth', 2);
allDistances = sqrt((boundaryx - centroidx(k)).^2 + (boundaryy - centroidy(k)).^2);
end
sequence = rot90(flip(0:numel(allDistances)-1));
plot(sequence,allDistances)
答案 0 :(得分:0)
根据您在帖子中提到的link,我的输出是:
它与此page上的数字相同!我应该说那个页面上的数字是一个名为" Hand Gesture Recognition"第二个图显示"距离与有序轮廓点"这与你的完全不同。你的代码做了别的事!
该网站上的第二个图表是function [ fingertips ] = getFingertips( x_cont, y_cont, comX, comY, display_info )
的输出。您可以从该站点下载该项目的所有功能。
我确实运行了您的代码。有一些问题,请您解释为什么使用[B,L] = bwboundaries(binaryImage,'noholes');
和boundaries = bwboundaries(binaryImage);
?它们是相同的,您不会在代码中使用[B,L]
,因此您不需要前者,以及为什么使用与centroidx = centroids(1:2:end);
相同的centroids(1)
}?
此page的代码用于为图像中的每个对象指定一个质心,并测量从质心到对象边界的距离。而且你使用了那些没有给出所需结果的代码。您使用一些额外的不必要的编码分配和变量,使其非结构化。请把它做得更好。谢谢
所以你的结果图是不同的,它必须是,因为你的代码的目标是完全不同的。
感谢。