| 1477 | namespace cv |
| 1478 | { |
| 1479 | static void complementComplexOutput(Mat& dst, int len, int dft_dims) |
| 1480 | { |
| 1481 | int i, n = dst.cols; |
| 1482 | size_t elem_size = dst.elemSize1(); |
| 1483 | if (elem_size == sizeof(float)) |
| 1484 | { |
| 1485 | float* p0 = dst.ptr<float>(); |
| 1486 | size_t dstep = dst.step / sizeof(p0[0]); |
| 1487 | for (i = 0; i < len; i++) |
| 1488 | { |
| 1489 | float* p = p0 + dstep*i; |
| 1490 | float* q = dft_dims == 1 || i == 0 || i * 2 == len ? p : p0 + dstep*(len - i); |
| 1491 | |
| 1492 | for (int j = 1; j < (n + 1) / 2; j++) |
| 1493 | { |
| 1494 | p[(n - j) * 2] = q[j * 2]; |
| 1495 | p[(n - j) * 2 + 1] = -q[j * 2 + 1]; |
| 1496 | } |
| 1497 | } |
| 1498 | } |
| 1499 | else |
| 1500 | { |
| 1501 | double* p0 = dst.ptr<double>(); |
| 1502 | size_t dstep = dst.step / sizeof(p0[0]); |
| 1503 | for (i = 0; i < len; i++) |
| 1504 | { |
| 1505 | double* p = p0 + dstep*i; |
| 1506 | double* q = dft_dims == 1 || i == 0 || i * 2 == len ? p : p0 + dstep*(len - i); |
| 1507 | |
| 1508 | for (int j = 1; j < (n + 1) / 2; j++) |
| 1509 | { |
| 1510 | p[(n - j) * 2] = q[j * 2]; |
| 1511 | p[(n - j) * 2 + 1] = -q[j * 2 + 1]; |
| 1512 | } |
| 1513 | } |
| 1514 | } |
| 1515 | } |
| 1516 | } |
| 1517 | |
| 1518 | void cv::dft( InputArray _src0, OutputArray _dst, int flags, int nonzero_rows ) |