使用轮廓距离的手势识别 - Matlab

时间:2018-02-03 15:59:00

标签: matlab plot

基于之前的作品(https://www.mathworks.com/matlabcentral/answers/144559-centroid-contour-for-a-binary-image-containing-multiple-objects)我试图使用位于http://cs.mcgill.ca/~pcrane/的手势图像绘制轮廓距离

不幸的是,似乎我的情节不一样,有什么原因吗?计算错了吗?

我只展示了第一张图片。

非常感谢。

enter image description here

脚本:

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) 

1 个答案:

答案 0 :(得分:0)

根据您在帖子中提到的link,我的输出是:

enter image description here

它与此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的代码用于为图像中的每个对象指定一个质心,并测量从质心到对象边界的距离。而且你使用了那些没有给出所需结果的代码。您使用一些额外的不必要的编码分配和变量,使其非结构化。请把它做得更好。谢谢

所以你的结果图是不同的,它必须是,因为你的代码的目标是完全不同的。

感谢。