OpenCV C++频率域相角减半,幅值不变

56 篇文章 5 订阅
55 篇文章 3 订阅

在复数坐标系下,相角减半,幅值不变;画图如下:

由倍角公式:

cos^{2}\alpha = \frac{1+cos2\alpha }{2}

sin^{2}\alpha = \frac{1-cos2\alpha }{2}

令:D = \sqrt{r1^{2}+{i1^{2}}}

则     cos\alpha = \frac{r}{D}      sin\alpha = \frac{i}{D}      cos2\alpha = \frac{r1}{D}

所以 r = D*\sqrt{\frac{D+r1}{2D}}         i = D*\sqrt{\frac{D-r1}{2D}}     

代码实现:

//将相角*0.5,幅值保持不变
void half_angel(Mat &complex_r, Mat &complex_i, Mat &dst)
{
    Mat temp[] = {Mat::zeros(complex_r.size(),CV_32FC1), Mat::zeros(complex_r.size(),CV_32FC1)};
    float realv=0.0,imaginv=0.0;
    for(int i=0;i<complex_r.cols;i++){
        for( int j = 0; j < complex_r.rows; j++ ){
            realv   = complex_r.at<float>(i,j);
            imaginv = complex_i.at<float>(i,j);
            float distance=sqrt(realv*realv+imaginv*imaginv);
            temp[0].at<float>(i,j) =distance*sqrt((distance+realv)/(2*distance));
            temp[1].at<float>(i,j) =distance*sqrt((distance-realv)/(2*distance));
        }
    }
    merge(temp, 2, dst);
}

效果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dwyane05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值