cvdxt.cpp.svn-base
来自「非结构化路识别」· SVN-BASE 代码 · 共 1,339 行 · 第 1/5 页
SVN-BASE
1,339 行
/*C-------n/8 butterfly-----------------------------------------------C*/
for( is = 0, id = 2*n2; is < n - 1; is = 2*id - n2, id *= 4 )
{
for( i1 = is + n8; i1 < n; i1 += id )
{
double T1, T2, T3, T4, T5;
T1 = X1(i1) - X3(i1);
X1(i1) = X1(i1) + X3(i1);
T2 = X2(i1) - X4(i1);
X2(i1) = X2(i1) + X4(i1);
T3 = Y1(i1) - Y3(i1);
Y1(i1) = Y1(i1) + Y3(i1);
T4 = Y2(i1) - Y4(i1);
Y2(i1) = Y2(i1) + Y4(i1);
T5 = (T4 - T1)*CV_SIN_45;
T1 = (T4 + T1)*CV_SIN_45;
T4 = (T3 - T2)*CV_SIN_45;
T2 = (T3 + T2)*CV_SIN_45;
X3(i1) = (float)(T4 + T1);
Y3(i1) = (float)(T4 - T1);
X4(i1) = (float)(T5 + T2);
Y4(i1) = (float)(T5 - T2);
}
}
if( n8 <= 1 )
continue;
/*C-------General butterfly. Two at a time----------------------------C*/
{
double SD1 = icvDxtTab[k+1][1], SS1 = SD1;
double SD3 = 3.*SD1-4.*SD1*SD1*SD1, SS3 = SD3;
double CD1 = icvDxtTab[k+1][0], CC1 = CD1;
double CD3 = 4.*CD1*CD1*CD1-3.*CD1, CC3 = CD3;
double TT1, TT3;
int j, jn;
for( j = 1; j < n8; j++ )
{
jn = n4 - 2*j;
for( is = 0, id = 2*n2; is < n; is = 2*id - n2, id *= 4 )
{
for( i1 = is + j; i1 < n + j; i1 += id )
{
double T1, T2, T3, T4, T5;
T1 = X1(i1) - X3(i1);
X1(i1) = X1(i1) + X3(i1);
T2 = X2(i1) - X4(i1);
X2(i1) = X2(i1) + X4(i1);
T3 = Y1(i1) - Y3(i1);
Y1(i1) = Y1(i1) + Y3(i1);
T4 = Y2(i1) - Y4(i1);
Y2(i1) = Y2(i1) + Y4(i1);
T5 = T1 - T4;
T1 = T1 + T4;
T4 = T2 - T3;
T2 = T2 + T3;
X3(i1) = (float)( T1*CC1 - T4*SS1);
Y3(i1) = (float)(-T4*CC1 - T1*SS1);
X4(i1) = (float)( T5*CC3 + T2*SS3);
Y4(i1) = (float)( T2*CC3 - T5*SS3);
i2 = i1 + jn;
T1 = X1(i2) - X3(i2);
X1(i2) = X1(i2) + X3(i2);
T2 = X2(i2) - X4(i2);
X2(i2) = X2(i2) + X4(i2);
T3 = Y1(i2) - Y3(i2);
Y1(i2) = Y1(i2) + Y3(i2);
T4 = Y2(i2) - Y4(i2);
Y2(i2) = Y2(i2) + Y4(i2);
T5 = T1 - T4;
T1 = T1 + T4;
T4 = T2 - T3;
T2 = T2 + T3;
X3(i2) = (float)( T1*SS1 - T4*CC1);
Y3(i2) = (float)(-T4*SS1 - T1*CC1);
X4(i2) = (float)(-T5*SS3 - T2*CC3);
Y4(i2) = (float)(-T2*SS3 + T5*CC3);
}
}
TT1 = CC1*CD1 - SS1*SD1;
SS1 = CC1*SD1 + SS1*CD1;
CC1 = TT1;
TT3 = CC3*CD3 - SS3*SD3;
SS3 = CC3*SD3 + SS3*CD3;
CC3 = TT3;
}
}
}
/*C-----Length two butterflies----------------------------------------C*/
for( is = 0, id = 4; is < n; is = 2*id - 2, id = 4*id )
{
for( i1 = is; i1 < n - 1; i1 += id )
{
double T1;
T1 = X1(i1);
X1(i1) = (float)(T1 + X1(i1+1));
X1(i1+1) = (float)(T1 - X1(i1+1));
T1 = Y1(i1);
Y1(i1) = (float)(T1 + Y1(i1+1));
Y1(i1+1) = (float)(T1 - Y1(i1+1));
}
}
/*C-------Digit reverse counter---------------------------------------C*/
icvBitRev_32fc( v, m, itab );
return CV_OK;
}
static CvStatus icvFFT_fwd_64fc( CvPoint2D64f* v, int m, int* itab )
{
int k, n = 1 << m, n2 = n;
int is, id, i1, i2;
/*C-----L shaped butterflies------------------------------------------C*/
for( k = m - 1; k > 0; k--, n2 >>= 1 )
{
int n4 = n2 >> 2;
int n8 = n4 >> 1;
CvPoint2D64f* v3 = v + 2*n4;
/* CSTAGE */
/*C-------Zero butterfly----------------------------------------------C*/
for( is = 0, id = 2*n2; is < n; is = 2*id - n2, id *= 4 )
{
for( i1 = is; i1 < n; i1 += id )
{
double T1, T2;
T1 = X1(i1) - X3(i1);
X1(i1) = X1(i1) + X3(i1);
T2 = Y2(i1) - Y4(i1);
Y2(i1) = Y2(i1) + Y4(i1);
X3(i1) = (T1 + T2);
T2 = T1 - T2;
T1 = X2(i1) - X4(i1);
X2(i1) = X2(i1) + X4(i1);
X4(i1) = T2;
T2 = Y1(i1) - Y3(i1);
Y1(i1) = Y1(i1) + Y3(i1);
Y3(i1) = (T2 - T1);
Y4(i1) = (T2 + T1);
}
}
if( n4 <= 1 )
continue;
/*C-------n/8 butterfly-----------------------------------------------C*/
for( is = 0, id = 2*n2; is < n - 1; is = 2*id - n2, id *= 4 )
{
for( i1 = is + n8; i1 < n; i1 += id )
{
double T1, T2, T3, T4, T5;
T1 = X1(i1) - X3(i1);
X1(i1) = X1(i1) + X3(i1);
T2 = X2(i1) - X4(i1);
X2(i1) = X2(i1) + X4(i1);
T3 = Y1(i1) - Y3(i1);
Y1(i1) = Y1(i1) + Y3(i1);
T4 = Y2(i1) - Y4(i1);
Y2(i1) = Y2(i1) + Y4(i1);
T5 = (T4 - T1)*CV_SIN_45;
T1 = (T4 + T1)*CV_SIN_45;
T4 = (T3 - T2)*CV_SIN_45;
T2 = (T3 + T2)*CV_SIN_45;
X3(i1) = (T4 + T1);
Y3(i1) = (T4 - T1);
X4(i1) = (T5 + T2);
Y4(i1) = (T5 - T2);
}
}
if( n8 <= 1 )
continue;
/*C-------General butterfly. Two at a time----------------------------C*/
{
double SD1 = icvDxtTab[k+1][1], SS1 = SD1;
double SD3 = 3.*SD1-4.*SD1*SD1*SD1, SS3 = SD3;
double CD1 = icvDxtTab[k+1][0], CC1 = CD1;
double CD3 = 4.*CD1*CD1*CD1-3.*CD1, CC3 = CD3;
double TT1, TT3;
int j, jn;
for( j = 1; j < n8; j++ )
{
jn = n4 - 2*j;
for( is = 0, id = 2*n2; is < n; is = 2*id - n2, id *= 4 )
{
for( i1 = is + j; i1 < n + j; i1 += id )
{
double T1, T2, T3, T4, T5;
T1 = X1(i1) - X3(i1);
X1(i1) = X1(i1) + X3(i1);
T2 = X2(i1) - X4(i1);
X2(i1) = X2(i1) + X4(i1);
T3 = Y1(i1) - Y3(i1);
Y1(i1) = Y1(i1) + Y3(i1);
T4 = Y2(i1) - Y4(i1);
Y2(i1) = Y2(i1) + Y4(i1);
T5 = T1 - T4;
T1 = T1 + T4;
T4 = T2 - T3;
T2 = T2 + T3;
X3(i1) = ( T1*CC1 - T4*SS1);
Y3(i1) = (-T4*CC1 - T1*SS1);
X4(i1) = ( T5*CC3 + T2*SS3);
Y4(i1) = ( T2*CC3 - T5*SS3);
i2 = i1 + jn;
T1 = X1(i2) - X3(i2);
X1(i2) = X1(i2) + X3(i2);
T2 = X2(i2) - X4(i2);
X2(i2) = X2(i2) + X4(i2);
T3 = Y1(i2) - Y3(i2);
Y1(i2) = Y1(i2) + Y3(i2);
T4 = Y2(i2) - Y4(i2);
Y2(i2) = Y2(i2) + Y4(i2);
T5 = T1 - T4;
T1 = T1 + T4;
T4 = T2 - T3;
T2 = T2 + T3;
X3(i2) = ( T1*SS1 - T4*CC1);
Y3(i2) = (-T4*SS1 - T1*CC1);
X4(i2) = (-T5*SS3 - T2*CC3);
Y4(i2) = (-T2*SS3 + T5*CC3);
}
}
TT1 = CC1*CD1 - SS1*SD1;
SS1 = CC1*SD1 + SS1*CD1;
CC1 = TT1;
TT3 = CC3*CD3 - SS3*SD3;
SS3 = CC3*SD3 + SS3*CD3;
CC3 = TT3;
}
}
}
/*C-----Length two butterflies----------------------------------------C*/
for( is = 0, id = 4; is < n; is = 2*id - 2, id = 4*id )
{
for( i1 = is; i1 < n - 1; i1 += id )
{
double T1;
T1 = X1(i1);
X1(i1) = (T1 + X1(i1+1));
X1(i1+1) = (T1 - X1(i1+1));
T1 = Y1(i1);
Y1(i1) = (T1 + Y1(i1+1));
Y1(i1+1) = (T1 - Y1(i1+1));
}
}
/*C-------Digit reverse counter---------------------------------------C*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?