2011-11-13 158 views
10

的MATLAB圖像處理我有一個看起來像這樣的圖像:小圓圈

Bottle

我有我應圈住自己的開放所有的瓶子的任務。我創建了一個簡單的算法並開始工作。我的算法如下:

  • 閾值的原始圖像
  • 不要在它
  • 一些形態開使用區道具使得僅區域相當於填充空孔
  • 獨立的圖像的部選擇瓶子的嘴巴。
  • 找到每個質心並在每個瓶子周圍繪製圓圈。

我按照上面的算法做了,但是我有一些圖像的一部分圍繞着我畫一個圓。這是因爲我已經選擇了該區域,因爲瓶口區域和剩餘噪音幾乎相同。所以我產生了一個這樣的人物。

應用上的圖像看起來像這樣的處理:

Enter image description here

而且我在原始圖像繪製圈後的最終圖像是這樣的:

Enter image description here

我想我可以處理額外的圓圈,也就是說,由於圖像的白色部分保持如下圖2所示。這可以使用區域偏移來區分。這是一個好主意還是還有其他一些方法?我將如何處理玻璃後面的其他瓶子並選擇它們?

+1

另一個想法是使用[Hough變換](http://en.wikipedia.org/wiki/Hough_transform)[檢測圓圈](http://www.cis.rit.edu/class/simg782/lectures /lecture_10/lec782_05_10.pdf) – Amro

+0

可能的[最好的圓擬合算法]的副本(http://stackoverflow.com/questions/4387488/the-best-circle-fitting-algorithm) – abcd

+1

有幾個免費可用的MATLAB實現MATLAB Central File Exchange上的[圓形Hough變換](http://www.mathworks.com/matlabcentral/fileexchange/?term=hough+transform+circle)。 –

回答

5

您爲您的問題提供的很好的示例圖像!

你可以用來檢測剩餘瓶子(如果有的話)的一件事是瓶子放置的明確結構。 瓶子的4乘5格應該相對容易定位,並且當網格位於時,您可以測試是否在每個預期的瓶子位置檢測到瓶子。

關於額外檢測瓶,可以使用形狀的功能,如

  • 偏心,
  • 第一Hu矩
  • 周長之間的比率的平方過的區域(其被最小化一圈)details here

如果你能夠檢測到網格,應該很容易找到它作爲一個離羣值(遠離預期瓶位置on)並相應地丟棄。

祝您的項目順利!

2

我使用了相同的方法使用面積和周長之間的比例midtiby的第三項建議稱爲形狀因子:

4π*面積/周長^ 2

以檢測從一個輪廓追蹤圖像圓(從閾值圖像)取得巨大成功;

http://www.empix.com/NE%20HELP/functions/glossary/morphometric_param.htm

關於4個unfound瓶,這是相當棘手沒有一些先驗的是什麼你看(如使用4×5格討論,然後從每個中心尋找知識細胞)。我確實認爲,從輪廓列表中,大多數是瓶頂(可以使用形狀因子測試),但是,其中一個是大矩形。如果可以找到矩形的末端(從面積最大的輪廓開始),然後從第三個圖像中刪除它,則會留下部分圓圈。如果你然後輪廓跟蹤這些部分圓圈,並使用形狀因子/曲線檢測等混合可能會有所幫助?是的,再次祝你好運!