2011-10-02 2 views
2

는 사람이 코드의 문제가 무엇인지 말해 줄 수 변환.푸리에 기본적으로 나는 이미지의 DFT를 계산하고 내 화면에 이미지로 보여주기 위해 노력하고 <p></p> ... + emgucv

Image<Gray, float> GreyOriginalImage = new Image<Gray, float>(strFileName); 
Matrix<float> imageMat = new Matrix<float>(CvInvoke.cvGetOptimalDFTSize(GreyOriginalImage.Rows) , CvInvoke.cvGetOptimalDFTSize(GreyOriginalImage.Cols)); 

GreyOriginalImage.CopyTo(imageMat.GetSubRect(GreyOriginalImage.ROI)); 
CvInvoke.cvDFT(imageMat , imageMat , Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD , imageMat.Rows); 

GreyFourierImage = new Image<Gray, float>(imageMat.Rows , imageMat.Cols); 
imageMat.CopyTo(GreyFourierImage); 

ImageBox2.Image = GreyFourierImage; 
imageBox2.Show(); 

문제는

내가 emgu의 이력서와 비주얼 스튜디오 2010을 사용하고 있습니다 .... 실행하고 이미지가 표시되지 도착하는 동안 코드가 달려 있다는 것입니다.

답변

4

그럼 난 당신의 코드를 통해 갔어요 및 문제 라인은 여기를 디버깅 : 당신은 부동이다 imageMat 복사하려고

imageMat.CopyTo(GreyFourierImage); 

[] 이미지 플로트에 배열 [,, *] 이것이 제대로 작동하지 않으며 프로그램이 멈춘 이유입니다. 여기

는 cvDFT에서 상상과 실제 부품을 분할 코드입니다 : 내가 파고 편집의 비트 다음 해결책을 발견했습니다

Image<Gray, float> image = new Image<Gray, float>(open.FileName); 
IntPtr complexImage = CvInvoke.cvCreateImage(image.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_32F, 2); 

CvInvoke.cvSetZero(complexImage); // Initialize all elements to Zero 
CvInvoke.cvSetImageCOI(complexImage, 1); 
CvInvoke.cvCopy(image, complexImage, IntPtr.Zero); 
CvInvoke.cvSetImageCOI(complexImage, 0); 

Matrix<float> dft = new Matrix<float>(image.Rows, image.Cols, 2); 
CvInvoke.cvDFT(complexImage, dft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, 0); 

//The Real part of the Fourier Transform 
Matrix<float> outReal = new Matrix<float>(image.Size); 
//The imaginary part of the Fourier Transform 
Matrix<float> outIm = new Matrix<float>(image.Size); 
CvInvoke.cvSplit(dft, outReal, outIm, IntPtr.Zero, IntPtr.Zero); 

//Show The Data  
CvInvoke.cvShowImage("Real", outReal); 
CvInvoke.cvShowImage("Imaginary ", outIm); 

건배,

크리스

+0

안녕 내 건배 위의 aswer – Chris