Kinect上的顏色和深度傳感器產生的圖像略微不對齊。我怎樣才能改變他們使他們排隊?如何將kinect的深度圖像與彩色圖像對齊
回答
的關鍵,這是調用「Runtime.NuiCamera.GetColorPixelCoordinatesFromDepthPixel」
下面是Runtime類的擴展方法。它返回一個WriteableBitmap對象。作爲新幀進來這WriteableBitmap的自動更新,因此它的用法非常簡單:
kinect = new Runtime();
kinect.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseDepthAndPlayerIndex);
kinect.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution320x240, ImageType.DepthAndPlayerIndex);
kinect.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color);
myImageControl.Source = kinect.CreateLivePlayerRenderer();
,這裏是代碼本身:
public static class RuntimeExtensions
{
public static WriteableBitmap CreateLivePlayerRenderer(this Runtime runtime)
{
if (runtime.DepthStream.Width == 0)
throw new InvalidOperationException("Either open the depth stream before calling this method or use the overload which takes in the resolution that the depth stream will later be opened with.");
return runtime.CreateLivePlayerRenderer(runtime.DepthStream.Width, runtime.DepthStream.Height);
}
public static WriteableBitmap CreateLivePlayerRenderer(this Runtime runtime, int depthWidth, int depthHeight)
{
PlanarImage depthImage = new PlanarImage();
WriteableBitmap target = new WriteableBitmap(depthWidth, depthHeight, 96, 96, PixelFormats.Bgra32, null);
var depthRect = new System.Windows.Int32Rect(0, 0, depthWidth, depthHeight);
runtime.DepthFrameReady += (s, e) =>
{
depthImage = e.ImageFrame.Image;
Debug.Assert(depthImage.Height == depthHeight && depthImage.Width == depthWidth);
};
runtime.VideoFrameReady += (s, e) =>
{
// don't do anything if we don't yet have a depth image
if (depthImage.Bits == null) return;
byte[] color = e.ImageFrame.Image.Bits;
byte[] output = new byte[depthWidth * depthHeight * 4];
// loop over each pixel in the depth image
int outputIndex = 0;
for (int depthY = 0, depthIndex = 0; depthY < depthHeight; depthY++)
{
for (int depthX = 0; depthX < depthWidth; depthX++, depthIndex += 2)
{
// combine the 2 bytes of depth data representing this pixel
short depthValue = (short)(depthImage.Bits[depthIndex] | (depthImage.Bits[depthIndex + 1] << 8));
// extract the id of a tracked player from the first bit of depth data for this pixel
int player = depthImage.Bits[depthIndex] & 7;
// find a pixel in the color image which matches this coordinate from the depth image
int colorX, colorY;
runtime.NuiCamera.GetColorPixelCoordinatesFromDepthPixel(
e.ImageFrame.Resolution,
e.ImageFrame.ViewArea,
depthX, depthY, // depth coordinate
depthValue, // depth value
out colorX, out colorY); // color coordinate
// ensure that the calculated color location is within the bounds of the image
colorX = Math.Max(0, Math.Min(colorX, e.ImageFrame.Image.Width - 1));
colorY = Math.Max(0, Math.Min(colorY, e.ImageFrame.Image.Height - 1));
output[outputIndex++] = color[(4 * (colorX + (colorY * e.ImageFrame.Image.Width))) + 0];
output[outputIndex++] = color[(4 * (colorX + (colorY * e.ImageFrame.Image.Width))) + 1];
output[outputIndex++] = color[(4 * (colorX + (colorY * e.ImageFrame.Image.Width))) + 2];
output[outputIndex++] = player > 0 ? (byte)255 : (byte)0;
}
}
target.WritePixels(depthRect, output, depthWidth * PixelFormats.Bgra32.BitsPerPixel/8, 0);
};
return target;
}
}
一種方式做,這是假設顏色和深度圖像在它們之間具有相似的變化,並且使兩個圖像(或它們的較小版本)交叉相關。
- Pre-whiten the image s到獲得在底層的變化。
- Cross-correlate預白化圖像或它們的較小版本。
- 互相關的峯值位置會告訴你抵消X和ÿ
Peter,那些是有趣的文章。不過,我認爲這個解決方案可能會更具經驗。我認爲這可能只是一個抵消或類似的東西 –
:-)好的。我可能過度思考它。 [我剛讀過這類東西......](http://liu.diva-portal.org/smash/record.jsf?pid=diva2:420400) –
在工廠裏,每個kinect設備都經過校準並且相機之間的偏移量會被刻錄到設備的內存中。訣竅在於找到合適的API來利用這些數據。現在官方的kinect sdk只提供一個這樣的API,但其他人正在考慮未來版本 –
- 1. Kinect在MATLAB中將彩色圖像映射到深度圖像
- 2. Kinect深度和圖像幀對齊
- 3. Kinect深度圖像
- 4. 如何在OpenCV中對齊Kinect的RGB和深度圖像?
- 5. 在Kinect SDK v2.0中,如何將彩色圖像中的像素映射到深度圖像中的體素?
- 6. 將深度圖像與RGB圖像對齊
- 7. Kinect只顯示灰度圖像而不是彩色的圖像
- 8. kinect深度圖像處理
- 9. Kinect不顯示彩色圖像
- 10. 彩色圖像灰度圖像在Firefox
- 11. Kinect深度圖像僅部分可見
- 12. 在Matlab中保存Kinect深度圖像?
- 13. 轉換Kinect的深度圖像EmguCV圖像誤差
- 14. 來自Kinect的深度圖像:索引圖像?
- 15. 將JavaScript圖像與HTML圖像對齊
- 16. 如何適應彩色圖像灰度圖像的算法?
- 17. 將彩色圖像轉換爲灰度
- 18. 將灰度圖像轉換爲彩色
- 19. 圖像大小取決於圖像的色彩位深
- 20. Kinect v2從鼠標點擊使用彩色圖像和深度圖像獲取x,y,z c#
- 21. 如何創建Kinect深度圖像?可以將簡單的RGB圖像轉換爲像這些深度圖像的圖像嗎?
- 22. 彩色圖像與Raphael.js灰度圖像不工作在I.E. 9
- 23. 如何將現有的彩色圖像變成黑白圖像?
- 24. 如何將圖像與中心對齊?
- 25. 如何將圖像與名稱對齊?
- 26. 如何將圖像與文字對齊?
- 27. 如何將文本與圖像對齊?
- 28. 如何將文本與圖像對齊
- 29. 如何將字幕與圖像對齊?
- 30. 是否有任何好的彩色地圖使用python的PIL將灰度圖像轉換爲彩色圖像?
可悲的是鏈接的,現在扔死我的方式的黃色畫面。但我正在研究你提到的方法 –
@ Mr-Bell - 我用實際的代碼而不是鏈接來更新這篇文章 –
這看起來像是有效的。它看起來好像調用GetColorPixelCoordinatesFromDepthPixel正在殺死我的幀速率。 –