使用深度阈值进行手部分割
Hand segmentation using Depth thresholding
我想使用深度阈值从深度图像中分割出手。我使用了这个 link-
中的 kinect 和 leap 数据集
http://lttm.dei.unipd.it/downloads/gesture/
我尝试了这两个代码,但在这两种情况下我得到的输出都是全黑图像。原始 .png 图像是
我从数据集中的 1_depth.bin 文件中选择了深度值。
代码 1
I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1_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_depth.png');
I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1_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)
我得到的输出是
请告诉我这段代码有什么问题,为什么我没有得到任何结果?
您的代码极度不矢量化。以下是如何以更加矢量化的方式重写代码。这样既更高效又更 "readable":
I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1_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, []);
我想使用深度阈值从深度图像中分割出手。我使用了这个 link-
中的 kinect 和 leap 数据集http://lttm.dei.unipd.it/downloads/gesture/
我尝试了这两个代码,但在这两种情况下我得到的输出都是全黑图像。原始 .png 图像是
我从数据集中的 1_depth.bin 文件中选择了深度值。
代码 1
I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1_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_depth.png');
I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1_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)
我得到的输出是
请告诉我这段代码有什么问题,为什么我没有得到任何结果?
您的代码极度不矢量化。以下是如何以更加矢量化的方式重写代码。这样既更高效又更 "readable":
I = fopen('D:\dsktop\kinect_leap_dataset\acquisitions\P1\G1_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, []);