图像傅里叶变换后的复数域乘法

  • 复数域乘法法则
    设 x=a+bi,y=c+di (a、b、c、d∈R)是任意两个复数,那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i.
      其实就是把两个复数相乘,类似两个多项式相乘,展开得: ac+adi+bci+bdi^2,
      由i^2=-1,所以结果是(ac-bd)+(bc+ad)i 。两个复数的积仍然是一个复数。

  • 应用在图像中 A * B
    1、符号A,B分别代表两张图像
    2、通道分离split,通道分离后,第一个图像是实部,第二个是虚部
    3、将上述公式套用

  • 附代码

cv::Mat complexDivision(cv::Mat a, cv::Mat b)
{
    std::vector pa;
    std::vector pb;
    cv::split(a, pa);
    cv::split(b, pb);

    cv::Mat divisor = 1. / (pb[0].mul(pb[0]) + pb[1].mul(pb[1]));

    std::vector pres;

    pres.push_back((pa[0].mul(pb[0]) + pa[1].mul(pb[1])).mul(divisor));
    pres.push_back((pa[1].mul(pb[0]) + pa[0].mul(pb[1])).mul(divisor));

    cv::Mat res;
    cv::merge(pres, res);
    return res;
}

你可能感兴趣的:(opencv,复数域乘法)