LBP uniform pattern

来源:互联网 发布:淘宝网民族风 连衣裙 编辑:程序博客网 时间:2024/05/29 18:46

LBP的变形算法中有一种很重要的,就是uniform pattern

一直不很理解,现在又逼到眼前了,就看了一下

其实很简单,就是按跳变的次数区分。

定义U来表示跳变的次数,那么0000 0000序列,U=0;00110011序列,U=3

 

我写了个程序统计了一下U的直方图(手算实在捣鼓不清楚了,=。=)

 

    /// uniform pattern
 
    vector<vector<int>> patternVec;
 
    for ( int num1=0; num1<2; num1++  )
    {
        for ( int num2=0; num2<2; num2++  )
        {
            for ( int num3=0; num3<2; num3++  )
            {
                for ( int num4=0; num4<2; num4++  )
                {
                    for ( int num5=0; num5<2; num5++  )
                    {
                        for ( int num6=0; num6<2; num6++  )
                        {
                            for ( int num7=0; num7<2; num7++  )
                            {
                                for ( int num8=0; num8<2; num8++  )
                                {
                                    cout << num1 << num2 << num3 << num4 << num5 << num6 << num7 << num8 << "    " ;
                                    vector<int> oneLine;
                                    oneLine.push_back(num1);
                                    oneLine.push_back(num2);
                                    oneLine.push_back(num3);
                                    oneLine.push_back(num4);
                                    oneLine.push_back(num5);
                                    oneLine.push_back(num6);
                                    oneLine.push_back(num7);
                                    oneLine.push_back(num8);
 
                                    patternVec.push_back( oneLine );
                                }
                            }
                        }
                    }
                }
            }
        }
    }
 
    /// 连续性的判定
    int disContinuty[8]={0}; /// 统计跳变的次数
    for ( int i=0; i< patternVec.size(); i++ )
    {
        vector<int> oneLine = patternVec[i];
 
        int cnt = 0;
 
        int curr = oneLine[0];
 
        for ( int j=1; j<oneLine.size(); j++ )
        {
            int t = oneLine[j];
            if ( t!=curr )
            {
                curr = t;
                cnt++;
            }
        }
 
        disContinuty[cnt]++;
    }
 
    /// 输出
    for ( int i=0; i<8; i++ )
    {
        cout << "跳变" << i << "次的数目:" << disContinuty[i] << endl;
    }

 

结果:

 

00000000        00000001        00000010        00000011        00000100 
00000101        00000110        00000111        00001000        00001001 
00001010        00001011        00001100        00001101        00001110 
00001111        00010000        00010001        00010010        00010011 
00010100        00010101        00010110        00010111        00011000 
00011001        00011010        00011011        00011100        00011101 
00011110        00011111        00100000        00100001        00100010 
00100011        00100100        00100101        00100110        00100111 
00101000        00101001        00101010        00101011        00101100 
00101101        00101110        00101111        00110000        00110001 
00110010        00110011        00110100        00110101        00110110 
00110111        00111000        00111001        00111010        00111011 
00111100        00111101        00111110        00111111        01000000 
01000001        01000010        01000011        01000100        01000101 
01000110        01000111        01001000        01001001        01001010 
01001011        01001100        01001101        01001110        01001111 
01010000        01010001        01010010        01010011        01010100 
01010101        01010110        01010111        01011000        01011001 
01011010        01011011        01011100        01011101        01011110 
01011111        01100000        01100001        01100010        01100011 
01100100        01100101        01100110        01100111        01101000 
01101001        01101010        01101011        01101100        01101101 
01101110        01101111        01110000        01110001        01110010 
01110011        01110100        01110101        01110110        01110111 
01111000        01111001        01111010        01111011        01111100 
01111101        01111110        01111111        10000000        10000001 
10000010        10000011        10000100        10000101        10000110 
10000111        10001000        10001001        10001010        10001011 
10001100        10001101        10001110        10001111        10010000 
10010001        10010010        10010011        10010100        10010101 
10010110        10010111        10011000        10011001        10011010 
10011011        10011100        10011101        10011110        10011111 
10100000        10100001        10100010        10100011        10100100 
10100101        10100110        10100111        10101000        10101001 
10101010        10101011        10101100        10101101        10101110 
10101111        10110000        10110001        10110010        10110011 
10110100        10110101        10110110        10110111        10111000 
10111001        10111010        10111011        10111100        10111101 
10111110        10111111        11000000        11000001        11000010 
11000011        11000100        11000101        11000110        11000111 
11001000        11001001        11001010        11001011        11001100 
11001101        11001110        11001111        11010000        11010001 
11010010        11010011        11010100        11010101        11010110 
11010111        11011000        11011001        11011010        11011011 
11011100        11011101        11011110        11011111        11100000 
11100001        11100010        11100011        11100100        11100101 
11100110        11100111        11101000        11101001        11101010 
11101011        11101100        11101101        11101110        11101111 
11110000        11110001        11110010        11110011        11110100 
11110101        11110110        11110111        11111000        11111001 
11111010        11111011        11111100        11111101        11111110 
11111111     

 

跳变0次的数目:2 
跳变1次的数目:14 
跳变2次的数目:42 
跳变3次的数目:70 
跳变4次的数目:70 
跳变5次的数目:42 
跳变6次的数目:14 
跳变7次的数目:2

 

根据统计,前三种占的比例很大,因此保留,后面的5种合并成一种pattern,因此一共2+14+42+1=59种pattern。统计直方图的数目从2^8降到了59.起到了降维的作用

0 0
原创粉丝点击