본문 바로가기

Programming

OpenCV Java/C++ FourierFastTransferShift(fftshift) 푸리에 변환 후 위치 재설정 함수 (Matlab - fftshift) - (2)

 OpenCV Java/C++ FourierFastTransferShift(fftshift) 푸리에 변환 후 위치 재설정 함수 (Matlab - fftshift) - (2)




 I posted circShift method(below) what i coded few days ago, but it's new code using OpenCV core function a lot. Reference ( Here )

 

2018/10/02 - [Programming/Image Processing] - OpenCV Java/C++ FourierFastTransferShift(fftshift) 푸리에 변환 후 위치 재설정 함수 (Matlab - fftshift) - (1)


 Performance that i coded this time is kinda better than the last one. But i just tested really small size matrix, so idk well. Anyway, both worked well




 이전 (1)번 글의 코드는 직접 만들어서 썼던 fftshift 함수이고, 이건 opencv rect 사이즈를 잘라다가 붙여넣는 방법으로 core 함수가 더 많이 쓰인 함수이다. 참고 출처는 ( 여기 )


전에 만든 코드는 아래에

2018/10/02 - [Programming/Image Processing] - OpenCV Java/C++ FourierFastTransferShift(fftshift) 푸리에 변환 후 위치 재설정 함수 (Matlab - fftshift) - (1)



성능 자체는 이번에 쓴 코드가 살짝 빠른 것 같다. 너무 작은 matrix로 테스트를 해서 몇 밀리세컨 밖에 차이가 안났지만, 사이즈가 커지면 퍼포먼스 차이도 커지지 않을까 싶음.




아무튼.. 코드를 보자


Lemme see code..





/**

* FFT Shift core 2

* firstQuadrant to thirdQuadrant, secondQuadrant to fourthQuadrant

* thirdQuadrant to firstQuadrant, fourthQuadrant to secondQuadrant

* @param in

* @param out

*/

private static void circShift2(Mat in) {

// in = in.submat(new Rect(0, 0, in.cols() & -2, in.rows() & -2));

int cx = in.cols() / 2;

int cy = in.rows() / 2;


Mat q0 = new Mat(in, new Rect(0, 0, cx, cy));

Mat q1 = new Mat(in, new Rect(cx, 0, cx, cy));

Mat q2 = new Mat(in, new Rect(0, cy, cx, cy));

Mat q3 = new Mat(in, new Rect(cx, cy, cx, cy));


Mat tmp = new Mat();

q0.copyTo(tmp);

q3.copyTo(q0);

tmp.copyTo(q3);


q1.copyTo(tmp);

q2.copyTo(q1);

tmp.copyTo(q2);

}





//Main function example /////////////////////////////////////////////////////////////////////////////



public static void main(String args[]) {

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);


// int sizeSet = 2;

int sizeSet = 4;

// int sizeSet = 3;


//Test magic number (2), (4), (3)

Mat inputMat = Mat.zeros(sizeSet, sizeSet, CvType.CV_32F);

// inputMat.put(0, 0, 1);

// inputMat.put(0, 1, 3);

// inputMat.put(1, 0, 4);

// inputMat.put(1, 1, 2);

inputMat.put(0, 0, 16);

inputMat.put(0, 1, 2);

inputMat.put(0, 2, 3);

inputMat.put(0, 3, 13);

inputMat.put(1, 0, 5);

inputMat.put(1, 1, 11);

inputMat.put(1, 2, 10);

inputMat.put(1, 3, 8);

inputMat.put(2, 0, 9);

inputMat.put(2, 1, 7);

inputMat.put(2, 2, 6);

inputMat.put(2, 3, 12);

inputMat.put(3, 0, 4);

inputMat.put(3, 1, 14);

inputMat.put(3, 2, 15);

inputMat.put(3, 3, 1);

//// inputMat.put(0, 0, 8);

//// inputMat.put(0, 1, 1);

//// inputMat.put(0, 2, 6);

//// inputMat.put(1, 0, 3);

//// inputMat.put(1, 1, 5);

//// inputMat.put(1, 2, 7);

//// inputMat.put(2, 0, 4);

//// inputMat.put(2, 1, 9);

//// inputMat.put(2, 2, 2);

//

//

// Mat outputMat = Mat.zeros(sizeSet, sizeSet, CvType.CV_32F);

long time = System.currentTimeMillis();

Mat outputMat = CoreFpmImg.fft2NFftShift(inputMat);

for (int i = 0; i < outputMat.rows(); ++i)

{

for (int j = 0; j < outputMat.cols(); ++j)

{

System.out.print(outputMat.get(i, j)[0] + " ");

}

System.out.println("");

}

System.out.println(outputMat.channels());

inputMat = CoreFpmImg.ifftShiftNIfft2(outputMat);

System.out.println(inputMat.channels());

for (int i = 0; i < inputMat.rows(); ++i)

{

for (int j = 0; j < inputMat.cols(); ++j)

{

System.out.print(inputMat.get(i, j)[0] + " ");

}

System.out.println("");

}


System.out.println(System.currentTimeMillis() - time);

// Core.dft(inputMat, outputMat, Core.DFT_COMPLEX_OUTPUT, 0);

// for (int i = 0; i < outputMat.rows(); ++i) 

// {

// for (int j = 0; j < outputMat.cols(); ++j) 

// {

// System.out.print(outputMat.get(i, j)[1] + " ");

// }

// System.out.println("");

// }

// System.out.println("");

// System.out.println("outputMat dims -> " + outputMat.dims());

//

// Mat plane1 = Mat.zeros(outputMat.rows(), outputMat.cols(), CvType.CV_32F);

// Mat plane2 = Mat.zeros(outputMat.rows(), outputMat.cols(), CvType.CV_32F);

//

// CoreFpmImg.fftShift(outputMat, plane1, 0);

// CoreFpmImg.fftShift(outputMat, plane2, 1);

//

// List<Mat> listMat = Arrays.asList(plane1, plane2);

// Core.merge(listMat, outputMat);

//

// for (int i = 0; i < outputMat.rows(); ++i) 

// {

// for (int j = 0; j < outputMat.cols(); ++j) 

// {

// System.out.print(outputMat.get(i, j)[1] + " ");

// }

// System.out.println("");

// }

// System.out.println("");

//

//

// CoreFpmImg.ifftShift(outputMat, plane1, 0);

// CoreFpmImg.ifftShift(outputMat, plane2, 1);

//

// listMat = Arrays.asList(plane1, plane2);

// Core.merge(listMat, outputMat);

//

// for (int i = 0; i < outputMat.rows(); ++i) 

// {

// for (int j = 0; j < outputMat.cols(); ++j) 

// {

// System.out.print(outputMat.get(i, j)[1] + " ");

// }

// System.out.println("");

// }

// System.out.println("");

// System.out.println("outputMat dims -> " + outputMat.dims());

}





Something else you might like..




2018/11/17 - [Programming/C++] - C++ How to convert string to integer in C++, string 에서 int 변환하는 방법, Easiest way to convert string to int.

2018/11/17 - [Programming/C++] - C++ How to convert integer to string in C++, int 에서 string 변환하는 방법, Easiest way to convert int to string.



2018/11/13 - [Programming/Java] - JavaFx Drag N Drop event / 자바Fx 드래그앤드롭 이벤트 처리 / Java, C++, example



2018/11/18 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #30 circleOfNumbers. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/11/17 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #29 chessBoardCellColor. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/11/15 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #28 alphabeticShift. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/11/15 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #27 variableName. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/11/14 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #26 evenDigitsOnly. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar