Complex number matrix division in OpenCv like Matlab
(실수부와 복소수허수부 포함된 매트릭스 나눗셈)
Real number part + Complex number part
You could do the math very easily in Matlab
But in OpenCV, you have to use 2 channel Mat and fill in the mat using real and complex number for showing frequency etc..
A code below is kinda dirty, but I compared Matlab code result and JavaCV code result using JUnit.
JUnit was so useful, I'll post that later after reading some.
실수부 + 허수부(복소수포함) 형식의 수는
Matlab 에서는 편하게 사칙연산을 할 수 있지만,
OpenCV 를 이용해서 처리를 하게 되면.. 2개의 채널을 가진 Matrix를 이용하고,
real (실수부) + complex (허수부) 를 이용한 matrix 의 요소들을 채워넣어주어
주파수 등을 표현하게 된다.
코드는 일단 지저분하긴.. 하지만, 기능 자체는 matlab 에서의 계산 값과
JUnit 테스트 케이스를 따로 만들어서 확인까지 마친 코드이다.
JUnit 은 써보니까 상당히 좋은데, 나중에 Cookbook 을 읽어보거나 해서 포스팅 해야겠슴~
간단한 나눗셈..
Simple division...
Code.. let me see code!!
코드.. 코드를 보자!!!!
/**
* 2 channel complex mat division
* @param mat1
* @param mat2
* @return
*/
public static Mat mat2CDivByMat2C(final Mat mat1, final Mat mat2) {
Mat tempMat = Mat.zeros(mat1.rows(), mat1.cols(), CvType.CV_64FC2);
for (int i = 0; i < tempMat.rows(); ++i)
{
for (int j = 0; j < tempMat.cols(); ++j)
{
double[] buffer1 = mat1.get(i, j);
double[] buffer2 = mat2.get(i, j);
double[] buffer3 = buffer2.clone();
buffer3[1] = -buffer3[1];
double[] numerator = compMultiComp(buffer1, buffer3);
double denominator = Math.pow(buffer2[0], 2) + (Math.pow(buffer2[1], 2));
buffer1[0] = numerator[0] / denominator;
buffer1[1] = numerator[1] / denominator;
tempMat.put(i, j, buffer1);
}
}
return tempMat;
}
/**
* 2 channel complex mat multiply
* @param complex1
* @param complex2
* @return
*/
public static double[] compMultiComp(final double[] complex1, final double[] complex2) {
double[] result = new double[2];
double real = (complex1[0] * complex2[0]) + (-(complex1[1] * complex2[1]));
double complex = (complex1[0] * complex2[1]) + (complex1[1] * complex2[0]);
result[0] = real;
result[1] = complex;
return result;
}
Something else you like...
2018/10/19 - [Programming/Image Processing] - Fourier transfer shift
2018/10/17 - [Programming/Image Processing] - OpenCV - CvType (Mat datatype) 오픈cv 매트릭스 데이터타입