【问题标题】:Hand gesture recognition using contour distance - Matlab使用轮廓距离的手势识别 - Matlab
【发布时间】:2018-02-04 20:22:52
【问题描述】:

基于以前的工作 (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) 

【问题讨论】:

  • 哪些情节,与什么相同?每个图像有 3 个图,绘制不同的东西,不是吗?您希望看到什么?
  • 抱歉,忘记添加了
  • 在我看来他们非常接近。请注意,没有唯一的开始轮廓的位置。他们在您开始的地方以外的地方开始了它。您可以使用circshift 修改一个图表,使其看起来更像另一个。

标签: matlab plot


【解决方案1】:

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

和这个page上的图一模一样!我应该说该页面上的数字是一个名为“手势识别”的项目的输出,第二张图显示的是“距离与有序轮廓点”,这与你的完全不同。您的代码执行其他操作!

该站点上的第二张图是function [ fingertips ] = getFingertips( x_cont, y_cont, comX, comY, display_info ) 的输出。您可以从该站点下载该项目的所有功能。

我确实运行了你的代码。有一些问题,你能解释一下为什么你使用[B,L] = bwboundaries(binaryImage,'noholes');boundaries = bwboundaries(binaryImage); 吗?它们是相同的,并且您在代码中不使用[B,L],所以您不需要前者,为什么您使用与centroids(1) 相同的centroidx = centroids(1:2:end);

来自page 的代码用于为图像中的每个对象分配一个质心,并测量从质心到对象边界的距离。而且您使用了一些代码行,但没有给出预期的结果。您使用了一些额外的不必要的编码分配和变量,这只会使其变得非结构化。请做得更好。谢谢

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

谢谢。

【讨论】:

  • 感谢 cmets 和输入。您对不必要的代码行是正确的(已修复)。我的目标是自己编写一个代码,创建从质心到轮廓/轮廓/边界点图的距离。跟随你的 cmets “所以你的结果图是不同的,它必须是,因为你的代码的目标是完全不同的”。我认为这就是我的代码所做的(从质心到轮廓/轮廓/边界点图的距离),我错了吗?
  • 如果您有其他解决方案,请分享。这条线: allDistances = sqrt((boundaryx - centroidx(k)).^2 + (boundaryy - centroidy(k)).^2);计算质心和边界点之间的距离。
猜你喜欢
  • 1970-01-01
  • 2012-07-12
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多