Arithmetic of complex number(2) division example code,
복소수 사칙연산(2) 나눗셈 코드, real/imaginary, java, opencv, matrix (2)
공식은..
Formula..
i^2 = -1,
c+di != 0.
(a + bi) / (c + di)
-> ( (ac + bd) / (c^2 + d^2) ) + ( (bc - ad) / (c^2 + d^2) )
곱셈은 아래에
Division formula is below
위의 공식대로 Mat을 pixel 단위로 연산해준 코드이고, compMultiComp 함수는
위에서 링크한 곱셈공식을 이용했다. 현재는 Core 함수로 전부 고쳤고 옛날 코드라서 살짝 안맞는게 있을지 모르겠음.
이후에 Core로 고친 코드도 포스팅 해야겠다
The code below is operating each pixel val in Mat same as formula above,
compMultiComp method is in link (multiply example).
Now I fixed all code using Core in CV lib, so it's old code.
Imma post code using Core later. tschuss~
Lemme see code..
코드를 보자..
/**
* 2 channel complex mat division
* JUnit test1 complete - 2018-10-25
* @param mat1
* @param mat2
* @return
*/
public static void mat2CDivByMat2C(final Mat mat1, final Mat mat2, final Mat dst) {
//2
//1
Mat tempMat = Mat.zeros(mat1.rows(), mat1.cols(), CvType.CV_32FC2);
int rows = mat1.rows();
int cols = mat1.cols();
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < 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);
}
}
}
Something else you might like...