我在MATLAB中做手势识别。我需要关于手指检测的帮助。我已经使用肤色检测检测到手,但不知道如何找到手指的数量。我已经使用bwboundary
在图像中进行边界检测,但它仅在图像没有错误时才有效。也就是说,在皮肤检测代码中标记手区域的轻微干扰将导致许多边界。如果有人引导我朝着正确的方向前进,我将非常感激。
image after skin is detected and marked我使用bwboundary
来查找边界。我也使用了imfill
,但它对我没什么帮助。
以下是代码
%Read the image, and capture the dimensions
img_orig = imread('hand.jpg');
height = size(img_orig,1);
width = size(img_orig,2);
%Initialize the output images
out = img_orig;
bin = zeros(height,width);
%Convert the image from RGB to YCbCr
img_ycbcr = rgb2ycbcr(img_orig);
Cb = img_ycbcr(:,:,2);
Cr = img_ycbcr(:,:,3);
%Detect Skin
[r,c,v] = find(Cb>=77 & Cb<=127 & Cr>=133 & Cr<=173);
numind = size(r,1);
%Mark Skin Pixels
for i=1:numind
out(r(i),c(i),:) = [0 0 255];
bin(r(i),c(i)) = 1;
end
imshow(img_orig);
figure; imshow(out);
figure; imshow(bin);
%now for count of fingers
img2=im2bw(bin,graythresh(bin));
imshow(img2)
img2=~img2;
imshow(img2)
B = bwboundaries(img2);
imshow(img2)
text(10,10,strcat('\color{green}Objects Found:',num2str(length(B))))
hold on