Cómo calcular el valor absoluto de números complejos en opencv

¿Alguien puede ayudarme sobre cómo obtener el valor absoluto de una matriz compleja? La matriz contiene un valor real en un canal y un valor imaginario en otro canal. Por favor, ayúdenme si es posible.

Gracias de antemano Arangarajan

preguntado el 03 de mayo de 12 a las 10:05

Quieres decir fotometría absoluta) valor o quieres decir magnitud ? -

2 Respuestas

Supongamos que tiene 2 componentes: X e Y, dos matrices del mismo tamaño y tipo. En su caso, pueden ser valores reales/im.

// n rows, m cols, type float; we assume the following matrices are filled 
cv::Mat X(n,m,CV_32F); 
cv::Mat Y(n,m,CV_32F);

Puedes calcular el valor absoluto de cada número complejo así:

// create a new matrix for storage
cv::Mat A(n,m,CV_32F,cv::Scalar(0.0));
for(int i=0;i<n;i++){
  // pointer to row(i) values
  const float* rowi_x = X.ptr<float>(i);
  const float* rowi_y = Y.ptr<float>(i); 
  float* rowi_a = A.ptr<float>(i); 
  for(int j=0;j<=m;j++){ 
     rowi_a[j] = sqrt(rowi_x[j]*rowi_x[j]+rowi_y[j]*rowi_y[j]);
  }
}

Respondido el 15 de Septiembre de 14 a las 17:09

Si observa el módulo de OpenCV phasecorr.cpp, hay una función llamada magSpectrums que ya hace esto y también manejará resultados de DFT conjugados llenos de simetría. No creo que esté expuesto por el archivo de encabezado, pero es bastante fácil copiarlo. Si le preocupa la velocidad, asegúrese de compilar con las opciones SIMD disponibles activadas porque pueden marcar una gran diferencia con este cálculo.

Respondido 23 ago 16, 01:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.