AForge.NET-Library를 사용하여 Microsoft Kinect로 주사위를 추적하려는 프로젝트에서 작업하고 있습니다. 프로젝트 자체에는 Kinect 초기화, Colorframe 획득 및 하나의 컬러 필터 적용과 같은 기본 사항 만 포함되어 있지만 이미 문제가 발생합니다. 그래서 여기 프로그램의 주요 부분이다 :Kinect 및 AForge로 이미지 처리
colorFrameManager' - 오브젝트 '의 Update'-방법은'다음과 같습니다void ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame != null)
{
colorFrameManager.Update(colorFrame);
BitmapSource thresholdedImage =
diceDetector.GetThresholdedImage(colorFrameManager.Bitmap);
if (thresholdedImage != null)
{
Display.Source = thresholdedImage;
}
}
}
}
:
public void Update(ColorImageFrame colorFrame)
{
byte[] colorData = new byte[colorFrame.PixelDataLength];
colorFrame.CopyPixelDataTo(colorData);
if (Bitmap == null)
{
Bitmap = new WriteableBitmap(colorFrame.Width, colorFrame.Height,
96, 96, PixelFormats.Bgr32, null);
}
int stride = Bitmap.PixelWidth * Bitmap.Format.BitsPerPixel/8;
imageRect.X = 0;
imageRect.Y = 0;
imageRect.Width = colorFrame.Width;
imageRect.Height = colorFrame.Height;
Bitmap.WritePixels(imageRect, colorData, stride, 0);
}
그리고 'getThresholdedImage'-방법 외모 같은 :
public BitmapSource GetThresholdedImage(WriteableBitmap colorImage)
{
BitmapSource thresholdedImage = null;
if (colorImage != null)
{
try
{
Bitmap bitmap = BitmapConverter.ToBitmap(colorImage);
HSLFiltering filter = new HSLFiltering();
filter.Hue = new IntRange(335, 0);
filter.Saturation = new Range(0.6f, 1.0f);
filter.Luminance = new Range(0.1f, 1.0f);
filter.ApplyInPlace(bitmap);
thresholdedImage = BitmapConverter.ToBitmapSource(bitmap);
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
return thresholdedImage;
}
지금 프로그램이 많이 느려
/이 행이 실행될 때 응답하지 않습니다 을filter.ApplyInPlace(bitmap);
그래서 이미이 스레드 (C# image processing on Kinect video using AForge)를 읽었지만 EMGU를 시도했지만 내부 예외로 인해 작동하지 못하고 스레드 스타터가 4 개월 이상 온라인 상태가 아니었기 때문에 그의 작업 코드에서 답변을 얻지 못했습니다. 이제 첫째로 나는 느린 실행을위한 이유는
filter.ApplyInPlace(bitmap);
수있는 방법이 이미지 처리 정말 너무 복잡인가 intereseted거야? 아니면 내 환경에 문제가 될 수 있습니까? 둘째 프레임 건너 뛰기가 좋은 해결책인지 묻고 싶습니다. 또는 500 밀리 초와 같이 매 폴링과 오픈 프레임을 사용하는 것이 더 좋습니다. 대단히 감사합니다!
답변 해 주셔서 감사합니다. 이미지의 해상도는 640 * 480이고 일반적으로 프레임 속도는 초당 30 프레임을 더합니다. 현재 Kinect에서 세 번째 프레임 만 요청/사용하고 있으므로 초당 약 10 프레임으로 작업하고 있습니다. 그러나 나는 더 많은 이미지 처리 (주사위와 숫자를 알아 내기 위해해야만하는 것)를하면 프레임 속도가 크게 줄어들 것이라고 두려워합니다. 그럼에도 불구하고 이미지의 크기를 먼저 조정하고 프레임 속도가 변경되는지 확인하겠습니다. – vein
번호를 추적하고 320 * 240의 해상도가 충분하지 않을까 두렵다면 약간 조정할 수 있습니다. 프레임을 가져 오면 복사본을 만들고 크기를 반으로 조정합니다 (320 * 240). 크기가 조정 된 사본은 RED 주사위를 추적하는 데 (더 빠름) 사용되므로 문제없이 HSL 필터를 적용 할 수 있습니다. RED 주사위가 프레임에 있으면 원래 이미지에서 사용할 좌표 (예 : X * 2)를 변환하여 숫자를 얻습니다. 하지만 간단한 크기 조정을 시도하기 전에 시도해 보시기 바랍니다. 320x240의 해상도로 충분하다고 생각합니다. – Univers3
고맙습니다. 이것은 주사위를 추적 할 수있는 것처럼 잘 작동하는 것 같습니다. 일반적으로 프레임 속도는 초당 8-10 프레임 사이이지만이 프로젝트만으로 충분합니다. – vein