貨架物品的分割


注:以后的博客更新都將指向Github主頁,http://lxiongh.github.com

      這個博客已經申請了盡2年時間,但一直沒有更新過博客,只是在CSDN博客中寫過幾篇關於飛信二次開群的博文,見 http://blog.csdn.net/lxiongh ,現已不再更新CSDN博客,轉而全心在博客園中撰寫我的學習經驗與生活體驗。希望能在這里與大家一起分享與學習。下面是我給大家帶來的第一篇博文,關於貨架物品的分割與識別,這里我只給大家分享貨架物品的分割過程,因為識別這一塊是由一個師兄完成的。總體方案流程圖如下:

image


 

項目的要求

      對貨架物品的識別與定位,如圖1,我們需要識別出不同的商品,同時知道相應商品的擺放位置。經過討論,我們將此問題分解成兩個子問題——分割與識別。其中分割由我來完成,識別任務交於師兄完成。

     IMG_20120728_104742

圖1


 

分割過程與方法

     任務簡述:我們需要將不同的物品分割開,需要滿足如下兩點要求,1.分割塊(patch)有且僅包含一種商品;2. 同一種商品可以被分割成不同的塊(patch),只要滿足后續的物品識別要求。

     分割過程:注意到貨架的特殊性,我們可以先對圖片進行行分割,然后對每個行分割后的圖片再進行列分割,最后得到用於物品識別的分割塊(patch)。

     實施方法:

     1. 行分割

     (1)方案1. 如圖2(a)所示,沿着豎直方向,對所有紅色框內的pixels進行直方圖統計,用相鄰兩個框內的直方圖歐氏距離衡量差異,得到一個差異曲線。如圖2(b)曲線的最低點為行分割線所外的位置。

image   image

                        圖2(a)                                                圖2(b)

     (2)方案2. 在實驗過程中,采用方案1的分割線經常會將物品分割開,如圖2(b)中的黃色行分割線所示。於是我們的最后實驗中,采用了方案2作為行分割的方法。

       和傳統的直線檢測算法一樣,我們先從圖像中檢測邊緣像素,然后從這些邊緣像素中分析可能存在的直線.傳統的邊緣檢測算法,例如Canny算子,不能很好的找到所需要的邊界點.

image

圖3 對同一圖像用不同參數進行Canny邊緣檢測的結果

       雖然可以調整不同參數得到不同的檢測結果,但是如圖3所示,不同參數或者導致過多與目標直線無關的邊緣被檢測到,或者導致一些和目標直線相關的重要邊緣丟失.

seg

圖4 Graph-based segmentation

       注意到圖像分割算法提供了很好的圖像邊緣,如圖4所示.因此我們以圖像分割后不同塊之間的邊界像素為初始條件來進行直線檢測,采用Efficient Graph-based image segmentation.當然圖像分割結果也和參數選取有關系,我們采用比較保守的參數,使得盡可能找到所有和目標直線相關的邊緣像素,我們只保留水平的邊緣像素。隨后腐蝕膨脹,再采用radon直線檢測算法進行直線的檢測,直線角度限定在-5~+5度,行分割結果如圖5所示。

lines

圖5. 行分割結果示意

    2. 列分割 

     采用的方法與行分割類似,通過對比發現,直方圖統計時,采用HSV空間的H通道得到的效果較為理想,如圖6所示。 不同窗口間的差異反應了色調的變化差異,當差異達到最大時,表明此處可能是不同類別的物品的列分割線。我們將窗口間的差異通過三次樣條插值擬合的方式,擬合成一條樣條曲線,其中極大值(從圖3中看為最低點,因圖左上角為坐標的原點)處為可能的列分割線,后經過一些細節上的處理,得到如圖7所示的行列分割結果。 

image

圖6 對不同通道進行比較

imageimageimage

圖7 行列分割結果


 

代碼下載鏈接為(MATLAB)

http://www.kuaipan.cn/file/id_55626101430419500.html

Copyright 2012 SYSU.LXIONGH. All Rights Reserved. 僅供交流學習之用.

EMAIL: lxiongh@126.com  QQ:464050924


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM