使用深度阈值处理手分割

时间:2017-07-31 06:07:40

标签: matlab kinect image-segmentation gesture-recognition image-thresholding

我想使用深度阈值从深度图像中分割手。我在这个链接中使用了这个kinect和leap数据集 -

http://lttm.dei.unipd.it/downloads/gesture/

我尝试了这两个代码,但我得到的输出是两种情况下的全黑图像。最初的.png图片是 original depth image

我从数据集中的1_depth.bin文件中选择了深度值。

代码1

I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1\1_depth.bin', 'r');
A = fread(I, 480*640, 'uint8=>uint8');
A = reshape(A, 480, 640);

min_row = min(A);
min_col = min(min_row);

for i = 1:480
    for j = 1:640
        if ((A(i,j) > (min_col + 10)) || (A(i,j) == (min_col + 10)))
           A(i,j) = 1;
       else
           A(i,j) = 0;
        end
    end
end
imshow(A)

代码2

image = imread('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1\1_depth.png');
I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1\1_depth.bin', 'r');
A = fread(I, 480*640, 'uint8=>uint8');
A = reshape(A, 480, 640);

min_row = min(A);
min_col = min(min_row);
for i = 1:480
    for j = 1:640
        if ((A(i,j) > (min_col + 10)) || (A(i,j) == (min_col + 10)))
            image(i,j) = 1;
        else
            image(i,j) = 0;
        end
    end
end
imshow(image)

我得到的输出是output image

请告诉我们这段代码有什么问题以及为什么我没有得到任何答案?

1 个答案:

答案 0 :(得分:0)

您的代码极无矢量化。以下是如何以更加矢量化的方式重新编写代码的方法。这更有效,更可读":

I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1\1_depth.bin', 'r');
A = fread(I, 480*640, 'uint8=>uint8');
A = reshape(A, 480, 640);

min_ = min(A(:));  % minimal value across rows and columns
mask = A>=(min_+10);  % no need for loop, vectorize code.
imshow(mask, []);