画像フーリエ変換後の複素領域乗算


  • 複素領域乗算法則はx=a+bi,y=c+di(a,b,c,d∈R)が任意の2つの複素数であるとすると,それらの積(a+bi)(c+di)=(ac-bd)+(bc+ad)i.は実は2つの複素数を乗算し,2つの多項式を乗算するように展開し,ac+adi+bci+bdi^2,i^2=−1であるため,(ac−bd)+(bc+ad)iとなる.2つの複素数の積は依然として1つの複素数である.
  • は画像に適用するA*B 1、符号A、Bはそれぞれ2枚の画像2、チャネル分離splitを表し、チャネル分離後、1番目の画像は実部、2番目は虚部3、上記式を
  • に適用する.
  • 付属コード
  • cv::Mat complexDivision(cv::Mat a, cv::Mat b)
    {
        std::vector<:mat> pa;
        std::vector<:mat> 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<:mat> 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;
    }