opencv:基於不變矩方法的圖像特徵提取

在遇到需要對一個圖像某個位置的物體進行判斷時,一般想到的都是拿已經存儲的圖像去對比,對比的時候,由於噪聲干擾以及多種冗餘信息存在的原因,不可能按像素一個個比對,需要對圖像特徵進行提取,然後再比對。
不變矩指的是物體經過平移、旋轉、縮放以及比例變換後仍保持不變的矩特徵量。
中心矩定義如下:

upq=xy(xx0)p(yy0)qf(x,y)

對於一個圖像,其特徵往往通過邊緣體現出來,因此可以通過邊緣檢測找出其邊緣點,將邊緣點歸入矩特徵量的計算中。
矩特徵量分別爲:

    void set_args(){
        args.clear();
        float m20 = central_M(2, 0);
        float m02 = central_M(0, 2);
        float m21 = central_M(2, 1);
        float m12 = central_M(1, 2);
        float m30 = central_M(3, 0);
        float m03 = central_M(0, 3);
        float m11 = central_M(1, 1);

        args.push_back(m20 + m02);
        args.push_back(pow(m20 - m02, 2) + 4 * pow(m11, 2));
        args.push_back(pow(m30 - 3 * m12, 2) + pow(3 * m21 - m03, 2));
        args.push_back(pow(m30 + m12, 2) + pow(m21 + m03, 2));//4
        args.push_back((m30 - 3 * m12)*(m30 + m12)*(pow(m30 + m12, 2) - 3 * pow(m21 + m03, 2)) + (3 * m21 + m03)*(m21 + m03)*(3 * pow(m30 + m12, 2) - pow(m21 + m03, 2)));
        args.push_back((m20 - m02)*(pow(m30 + m12, 2) - pow(m21 + m03, 2)) + 4 * m11*(m30 + m12)*(m21 + m03));//6
        args.push_back(((3 * m21 - m03)*(m30 + m12)*(pow(m30 + m12, 2) - 3 * pow(m21 + m03, 2))) + ((3 * m12 - m30)*(m21 + m03)*(pow(m30 + m12, 2) - 3 * pow(m21 + m03, 2))));

        for (auto&var : args){
            var = abs(log(abs(var)));
        }
    }

使用Opencv中的Canny算子進行邊緣檢測:

    vector<Mat> train_data;
    for (int i = 1; i < 6; i++){
        string filename = "train\\t";
        string suffx = ".png";
        filename += (char)(i+'0');
        filename += suffx;
        train_data.push_back(imread(filename, CV_LOAD_IMAGE_COLOR));
    }
    for (int i = 0; i < 5; i++){
        Mat img_gry;
        Mat img = train_data[i];
        cvtColor(img, img_gry, CV_BGR2GRAY);
        blur(img_gry, img_gry, Size(3, 3));
        Canny(img_gry, cany_dect, thresh, thresh * 3, 3);
        imshow("cur"+i,cany_dect);
        Moment mt(cany_dect);
        mt.set_args();
        mt.pirnt_args();
        cout << endl;
    }

對幾個進行了變形的相同圖形以及作爲對比的一個不同圖形的特徵值如下:
這裏寫圖片描述
可以看出形變量較少的特徵值比較接近,而對比圖形的特徵值差異較大,經過分類器訓練後,對圖像應具有一定的辨識能力。

參考資料:
《圖像處理與模式識別》
http://blog.csdn.net/carson2005/article/details/6854024/
http://blog.csdn.net/yang6464158/article/details/42459595
http://blog.csdn.net/xiaowei_cqu/article/details/19839019

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章