一個極其簡單的圖像識別小程序

前段時間寫了個簡單的圖像識別程序,主要實現(xiàn)了對螺絲盅弛、螺母、硬幣和小扳手的識別《峒瑁現(xiàn)在來簡單地做一個總結(jié)。
該程序的主要思路如下:

  1. 將采集到的RGB圖像轉(zhuǎn)化為灰度圖像
  2. 應用OSTU算法對圖像進行閾值分割并二值化
  3. 使用區(qū)域生長算法將各個待檢測目標提取出來
  4. 根據(jù)目標的形狀特征對目標進行分類

接下來對各個步驟做一些分析沉衣。

圖像預處理

圖像預處理是本實驗的第一步郁副。其目的是將目標物體的圖像從背景中分割出來,這樣我們才方便做后續(xù)的識別豌习。
首先將RGB圖像轉(zhuǎn)換為灰度圖像存谎,是為了去除冗余的色彩信息,同時也簡化了計算肥隆。
在灰度圖像的基礎上在進行圖像分割既荚。我們這里采取比較簡單又較為常用的閾值分割法來進行圖像分割。這里使用的OSTU算法是一種具有一定自適應性的閾值分割法栋艳,網(wǎng)絡上有許多對這個算法的詳細說明恰聘,我們這里不加贅述。

區(qū)域生長

雖然通過閾值分割我們已經(jīng)得到了所有目標物體的像素分布吸占,但是僅憑這個我們無法對每個物體的特征進行分析晴叨。因為我們并不知道單獨的每個目標的像素分布。所以我們要尋找一種方法矾屯,將每個物體的像素信息分布保存起來兼蕊。這種方法就是區(qū)域生長算法。區(qū)域生長的核心思想就是從種子點開始向相鄰的點逐點搜索问拘,從而將整個連通區(qū)域提取出來遍略。
以下是該部分的源代碼:

//返回生長區(qū)域點的個數(shù)
int CMainFrame::RegionGrow(Point init, vector<Point> &result, int **mark)
{
    stack<Point> seedStack;
    Point seed(0,0);
    int n = 0;  //區(qū)域內(nèi)點的數(shù)量

    mark[init.y][init.x] = 1;
    seedStack.push(init);
    Point tmp(seed.x,seed.y);
    while (1)
    {
        seed = seedStack.top();
        seedStack.pop();
        if(seed.x < m_pBmpInfo->bmiHeader.biWidth-1)
        {
            tmp.x = seed.x + 1;
            tmp.y = seed.y;
            if(!mark[tmp.y][tmp.x] && gImageBuffer[tmp.y*m_pBmpInfo->bmiHeader.biWidth+tmp.x] == 0)
            {
                seedStack.push(tmp);
                result.push_back(tmp);
                mark[tmp.y][tmp.x] = 1;    //將已被生長的點標記為1
                n++;    //區(qū)域點的數(shù)量加一
            }
        }
        if(seed.y < m_pBmpInfo->bmiHeader.biHeight-1)
        {
            tmp.x = seed.x;
            tmp.y = seed.y + 1;
            if(!mark[tmp.y][tmp.x] && gImageBuffer[tmp.y*m_pBmpInfo->bmiHeader.biWidth+tmp.x] == 0)
            {
                seedStack.push(tmp);
                result.push_back(tmp);
                mark[tmp.y][tmp.x] = 1; 
                n++;
            }
        }
        if(seed.x > 0)
        {
            tmp.x = seed.x - 1;
            tmp.y = seed.y;
            if(!mark[tmp.y][tmp.x] && gImageBuffer[tmp.y*m_pBmpInfo->bmiHeader.biWidth+tmp.x] == 0)
            {
                seedStack.push(tmp);
                result.push_back(tmp);
                mark[tmp.y][tmp.x] = 1; 
                n++;
            }
        }
        if(seed.y > 0)
        {
            tmp.x = seed.x;
            tmp.y = seed.y - 1;
            if(!mark[tmp.y][tmp.x] && gImageBuffer[tmp.y*m_pBmpInfo->bmiHeader.biWidth+tmp.x] == 0)
            {
                seedStack.push(tmp);
                result.push_back(tmp);
                mark[tmp.y][tmp.x] = 1;  
                n++;
            }
        }

        if(seedStack.empty())
            break;
    }
    return n;
}

目標識別

在得到了各個目標的像素信息后惧所,如何對目標進行分類呢骤坐?由于我們要識別的物體僅限于螺絲、螺母下愈、硬幣這樣形狀簡單的物體纽绍,我們只需通過一些簡單的特征就能將他們區(qū)分開來。

  • 螺母的中心為空势似,而螺絲拌夏、小扳手均為實心
  • 小扳手為L形的細桿,其長軸和短軸之比遠大于螺絲
  • 硬幣為圓形

憑借以上三條規(guī)則履因,就足以將螺絲障簿、螺母、硬幣和扳手區(qū)分開來了栅迄。

小結(jié)

本文主要是整理思路站故,細節(jié)的地方并未涉及,希望能對讀者有一些幫助~
P.S. 此文在我新搭建的獨立博客亦有發(fā)表:
http://cyanair.me/2016/03/31/a-simple-objection-recognition-program/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市西篓,隨后出現(xiàn)的幾起案子愈腾,更是在濱河造成了極大的恐慌,老刑警劉巖岂津,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虱黄,死亡現(xiàn)場離奇詭異,居然都是意外死亡吮成,警方通過查閱死者的電腦和手機橱乱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粱甫,“玉大人仅醇,你說我怎么就攤上這事∧е郑” “怎么了析二?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長节预。 經(jīng)常有香客問我叶摄,道長,這世上最難降的妖魔是什么安拟? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任蛤吓,我火速辦了婚禮,結(jié)果婚禮上糠赦,老公的妹妹穿的比我還像新娘会傲。我一直安慰自己,他們只是感情好拙泽,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布淌山。 她就那樣靜靜地躺著,像睡著了一般顾瞻。 火紅的嫁衣襯著肌膚如雪泼疑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天荷荤,我揣著相機與錄音退渗,去河邊找鬼。 笑死蕴纳,一個胖子當著我的面吹牛会油,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播古毛,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼翻翩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起体斩,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤梭稚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后絮吵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弧烤,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年蹬敲,在試婚紗的時候發(fā)現(xiàn)自己被綠了暇昂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡伴嗡,死狀恐怖急波,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘪校,我是刑警寧澤澄暮,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站阱扬,受9級特大地震影響泣懊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜麻惶,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一馍刮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窃蹋,春花似錦卡啰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惠奸,卻和暖如春梅誓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佛南。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嵌言,地道東北人嗅回。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像摧茴,于是被迫代替她去往敵國和親绵载。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 不同圖像灰度不同,邊界處一般會有明顯的邊緣娃豹,利用此特征可以分割圖像焚虱。需要說明的是:邊緣和物體間的邊界并不等同,邊緣...
    大川無敵閱讀 13,836評論 0 29
  • 1懂版、閾值分割 1.1 簡介 圖像閾值化分割是一種傳統(tǒng)的最常用的圖像分割方法鹃栽,因其實現(xiàn)簡單、計算量小躯畴、性能較穩(wěn)定而成...
    木夜溯閱讀 22,569評論 9 15
  • 去年Alaph GO擊敗李世石九段民鼓,社會掀起了機器學習技術(shù)討論的熱潮,不過很多人對機器學習并不了解蓬抄,本文借由手寫數(shù)...
    Sunhaorong閱讀 2,548評論 0 4
  • 圖像識別意義: 圖像是指物體的描述信息丰嘉,數(shù)字圖像是一個物體的數(shù)字表示。視覺是人類感知外部世界的最重要手段嚷缭,據(jù)統(tǒng)計饮亏,...
    木木口丁閱讀 8,418評論 1 21
  • 姓名:朱睿琦 學號:15180288015 【嵌牛導讀】:隨著數(shù)字圖像處理技術(shù)和人工智能的不斷發(fā)展,圖像識別技術(shù)無...
    BLASSREITER閱讀 3,904評論 0 0