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

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