- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to smooth a depth image acquired with RealSense and then project it to world coordinates using PXCMProjection. My code is in c# and I am trying to use EmguCV library to perform the smoothing operations on the image. I keep running in formatting errors.
Here is my code:
public static PXCMPoint3DF32[] toDepthData(PXCMImage image, PXCMProjection proj)
{
PXCMImage.ImageData data;
image.AcquireAccess(PXCMImage.Access.ACCESS_READ, out data);
PXCMPoint3DF32[] pts= new PXCMPoint3DF32[image.info.width * image.info.height];
proj.QueryVertices(image, worldPts);
image.ReleaseAccess(data);
image.Dispose();
return pts;
}
public PXCMPoint3DF32[] smoothDepthData(PXCMSession session, PXCMImage image, PXCMProjection proj)
{
// get image info
PXCMImage.ImageInfo info = image.info;
// get image data
PXCMImage.ImageData data;
image.AcquireAccess(PXCMImage.Access.ACCESS_READ, PXCMImage.PixelFormat.PIXEL_FORMAT_DEPTH, out data);
// create a bitmap from the image data
Bitmap dBmp = data.ToBitmap(0, info.width, info.height);
// release access to original image and dispose
image.ReleaseAccess(data);
image.Dispose();
// create a opencv image
Image<Gray, byte> dImg = new Image<Gray, byte>(dBmp);
// performing some OpenCV smoothing operations here
// ...
// convert opencv image to bitmap
dBmp = dImg.Bitmap;
// create new PXCMImage with the same dimensions as the original
PXCMImage smooth = session.CreateImage(info);
// get access to the data of the new image
PXCMImage.ImageData sData;
smooth.AcquireAccess(PXCMImage.Access.ACCESS_WRITE, PXCMImage.PixelFormat.PIXEL_FORMAT_DEPTH, out sData);
// copy bitmap data
BitmapData smoothData = new BitmapData();
smoothData.Scan0 = sData.planes[0];
smoothData.Stride = sData.pitches[0];
smoothData.PixelFormat = dBmp.PixelFormat;
smoothData.Width = dBmp.Width;
smoothData.Height = dBmp.Height;
BitmapData finalData = dBmp.LockBits(new Rectangle(0, 0, dBmp.Width, dBmp.Height), ImageLockMode.ReadOnly | ImageLockMode.UserInputBuffer, dBmp.PixelFormat, smoothData);
// relese image data
smooth.ReleaseAccess(sData);
dBmp.UnlockBits(finalData);
return toDepthData(smooth, proj);
smooth.Dispose();
}
My problem is that I only can transform PXCMImage instances with PixelFormat.PIXEL_FORMAT_RGB32 successfully into Emgu Image instances. When I try to use PixelFormat.PIXEL_FORMAT_DEPTH it generates a 'Parameter is not valid' exception in Emgu.
On the other hand, If I process the image in RGB32 I have no problem transforming into Emgu but, when I transform it back to PXCMImage, the depth values generated are off.
Any ideas would be appreciated. Thanks!
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
To expand on the question, I printed some of the values obtained with the RGB32. This values come from the following chain of transformations:
PXCMImage -> Bitmap -> Emgu Image<Bgr, byte> -> Bitmap -> PXCMImage
To clarify, I am not doing any openCV operations on the converted image; just converting it back and forth.
Here are the values that I get for the point (200, 200) before (*1*) and after (*2*) transformation in 5 consecutive frames:
------------------------------------
*1* (200,200) > x: -357.7245, y: 95.45338, z: 1673
*2* (200,200) > x: -6484.37, y: 1730.256, z: 30326
------------------------------------
*1* (200,200) > x: -362.4285, y: 96.7086, z: 1695
*2* (200,200) > x: -6814.084, y: 1818.236, z: 31868
------------------------------------
*1* (200,200) > x: -367.5603, y: 98.07792, z: 1719
*2* (200,200) > x: -6484.37, y: 1730.256, z: 30326
------------------------------------
*1* (200,200) > x: -367.1326, y: 97.96381, z: 1717
*2* (200,200) > x: -6099.704, y: 1627.614, z: 28527
------------------------------------
*1* (200,200) > x: -352.3789, y: 94.02699, z: 1648
*2* (200,200) > x: -6539.323, y: 1744.92, z: 30583
------------------------------------
*1* (200,200) > x: -361.3594, y: 96.42332, z: 1690
*2* (200,200) > x: -6759.132, y: 1803.572, z: 31611
------------------------------------
Again, any thoughts are welcome! Thanks!
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page