Haar特徵提取演算法的實現

2021-08-18 21:27:15 字數 2392 閱讀 2905

【自己動手,豐衣食足】系列

haar特徵是一種很早就被提出的影象特徵提取演算法,後面還經過了幾次改進。haar特徵能夠很好地運用於人臉識別技術,當然很多目標檢測技術中對目標影象的特徵提取也可以使用haar特徵。當我們使用opencv自帶的cascade分類器時可以選擇haar特徵作為訓練樣本資料的特徵描述子,然後將特徵描述子作為樣本資料送入cascade分類器中,就可以通過adaboost級聯分類演算法來訓練用於影象識別和目標檢測的分類器。我是在使用opencv自帶的cascade分類器時候接觸到了haar特徵提取,當時使用的時候,我是呼叫的是opencv庫中haar特徵提取的介面,haar特徵提取的演算法原理我並沒有深究,因為計算機視覺課程布置一項手動實現一種影象特徵提取演算法的作業。。。。。我順勢就把haar特徵提取的演算法原理學習了一下,並將其實現。

網上有太多的haar特徵提取演算法的原理介紹,這裡推薦一篇:原理過程已經介紹得非常詳細。

個人總結:

**如下:

定義的myhaar類的標頭檔案myhaar.h

#ifndef my_haar

#define my_haar

#include #include //定義多種模板

enum model_type;

struct model;

//定義haar類

class myhaar;

#endif // my_haar

定義的myhaar類的原始檔myhaar.cpp

#include "my_haar.h"

using namespace std;

using namespace cv;

myhaar::myhaar(){}

void myhaar::compute(cv::mat &src,vector&descriptor,model m,int step_x,int step_y,float mutil)

if(m.rects[0].y+total_model.height+step_y>src.rows)

break;

}//伸縮變換

mutil_transform(m,mutil);

//重新計算total_rect

vector::iterator iter=m.rects.begin();

total_model=*iter;

for(iter=m.rects.begin()+1;iter!=m.rects.end();iter++)

total_model=total_model|*iter;

}}//生成積分圖

void myhaar::generate_integral_image(mat &img)

//計算矩形畫素值之和

double myhaar::compute_sum_of_rect(rect r)

//模板進行伸縮變換

void myhaar::mutil_transform(model &m, float mutil)

}//模板平移

void myhaar::model_move(model &m, int bios_x, int bios_y)

}//重置模板的x座標為0

void myhaar::x_reset(model &m)

}//重置模板的y座標為0

void myhaar::y_reset(model &m)

}

main函式main.cpp:

#include #include #include "my_haar.h"

using namespace std;

using namespace cv;

//mat image2=(mat_<< );

model m_vertical;

model m_horizontal;

model m_center;

void init_model()

int main()

main.cpp中只定義了三種模板,如果要新增其他型別的模板,可以在main.cpp中新增並在init()函式中初始化。**中步長預設值為4,伸縮速度為1.5,執行**得到三種模板中某乙個模板的特徵值的維度都有幾千維。

其中的每乙個數值都代表了乙個模板在某乙個尺度在中的某乙個位置計算得到的特徵值,該**中的模板種類很少也沒有實現後來haar特徵提取演算法所提出的斜的模板,因此提取來的特徵運用於分類器的訓練和檢測效果應該沒***,改**只是基於haar的原理進行了一次流程的重現。如果我們定義了多種矩形模板並能自動選擇乙個合適的維度,應該就能將由此提取出來的超高維特徵向量送入分類其中進行訓練。

Haar矩陣特徵提取學習

matlab還沒有整合,但是有固定函式,如traincascadeobjectdetection裡面含有提取haar特徵的介面,也很少,幾乎沒有。opencv中倒是有一些提取haar的 就是有些過於複雜,跟adabost分類器連線在了一起。haar特徵提取演算法的實現 最後使用了這個 機器學習 之 ...

手勢識別之 Haar特徵提取

1 haar like特徵 haar like特徵最早是由papageorgiou等應用於人臉表示,viola和jones在此基礎上,使用3種型別4種形式的特徵。haar特徵分為三類 邊緣特徵 線性特徵 中心特徵和對角線特徵,組合成特徵模板。特徵模板內有白色和黑色兩種矩形,並定義該模板的特徵值為白色...

關於人臉檢測中的Haar特徵提取

關於人臉檢測中的haar特徵提取 影響adaboost人臉檢測訓練演算法速度很重要的兩方面是特徵選取和特徵計算。選取的特徵為矩特徵為haar特徵,計算的方法為積分圖。1 haar特徵 haar特徵分為三類 邊緣特徵 線性特徵 中心特徵和對角線特徵,組合成特徵模板。特徵模板內有白色和黑色兩種矩形,並定...