The kinect depth image has pixels with values equal to the calculated depth of object/surface in view. However, areas that absorb or scatter the kinect IR (like glossy surfaces or sharp edges) are filled with zero pixel value (indicating non-calculated depth). These regions with the missing information, represented by zero values, need to be filled prior to using the depth images. This filling process is done by replacing the zero value pixels with the statistical mode of the surrounding 25 pixels. Using a statistical mode returns sharper edges than using statistical mean values, since mode only inserts the maximum occurring value in the surrounding 25 pixels to the centre pixel.
Usage: [Q,R]=Kinect_DepthNormalization(depthImage)
Function Input: Kinect depth image (16-bit png)
Function Output: depth image with zero valued replaced , Number of zero pixels detected in the image.
Note:
The code is a matlab implementation of the algorithm used by Karl Sanford at Code Project (http://www.codeproject.com/Articles/317974/KinectDepthSmoothing)
Atif Anwer (2021). Kinect Depth Normalization (https://www.mathworks.com/matlabcentral/fileexchange/47830-kinect-depth-normalization), MATLAB Central File Exchange. Retrieved .
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Create scripts with code, output, and formatted text in a single executable document.
I believe that the performance is very good.
Please add the sample usage to the script. Thanks otherwise !!
Sample usage:
depthImage=imread(sample_depth_image);
[filledImage,zeroPixels] = Kinect_DepthNormalization(depthImage);
figure;
imagesc(depthImage);
figure;
imagesc(filledImage);
figure;
imshowpair(depthImage,filledImage,'montage');