我的主要动机是从简单的RGB图像(来自我的网络摄像头的图像)中检测手部。 我找到了一个示例代码find_hand_point
function [result, depth] = find_hand_point(depth_frame)
% function result = find_hand_point(depth_frame)
%
% returns the coordinate of a pixel that we expect to belong to the hand.
% very simple implementation, we assume that the hand is the closest object
% to the sensor.
max_value = max(depth_frame(:));
current2 = depth_frame;
current2(depth_frame == 0) = max_value;
blurred = imfilter(current2, ones(5, 5)/25, 'symmetric', 'same');
minimum = min(blurred(:));
[is, js] = find(blurred == minimum);
result = [is(1), js(1)];
depth = minimum;
结果变量是最接近相机(手)的坐标。
来自kinect设备的深度图像被传递给此函数,结果如下:
http://img839.imageshack.us/img839/5562/testcs.jpg
绿色矩形显示最接近相机的东西(手)。
问题:
答案 0 :(得分:1)
在http://www.andol.info/hci/830.htm
中可以找到一种更简单的方法在那里,作者将rgb图像转换为hsv,并且他只保留H,S和V值的特定范围,他认为这些是手形颜色。
在Matlab中:
function [hand] = get_hand(rgb_image)
hsv_image = rgb2hsv(rgb_image)
hand = ( (hsv_image(:,:,1)>= 0) & (hsv_image(:,:,1)< 20) ) & ( (hsv_image(:,:,2)>= 30) & (hsv_image(:,:,2)< 150) ) & ( (hsv_image(:,:,3)>= 80) & (hsv_image(:,:,3)< 255) )
end
hand=...
将为您提供一个矩阵,其中像素的位数为
0&lt; = H&lt; 20和30&lt; = S&lt; 150和80&lt; = V&lt; 255
答案 1 :(得分:1)
Kinect使用额外的传感器来检索深度数据。单个网络摄像头图像中没有足够的信息来重建3D图像。但是有可能根据一系列图像做出深远的估计。这是XTR-3D和类似解决方案背后的原则。
答案 2 :(得分:0)
我发现通过肤色检测手部的更好技术:)