鋼管識別專案1

2021-09-07 01:14:52 字數 2308 閱讀 8681

鋼管識別專案1

一、原始需求/:

二、初步分析:

鋼管的特點是由於其是有深度的,這就造成了管子的內部形成乙個陰影。尋找並識別這個陰影,是解決問題的主要方法。

同時需要注意到的一點是管子它本身的排列是有符合物理特性的,就是大體上要符合下圖的這種情況,這是個先驗知識。

干擾在於這個陰影不僅是管子內部才有的,管子和管子之間也會形成陰影;

此外,這些實際的中都存在管子被堵死的情況,這也是需要考慮的。

三、解決方案:

灰度並閾值處理,得到這樣的結果。需要注意的是這裡不要使用ostu。的確ostu很多時候都很好用,但是也有不好用的時候。即使是固定的閾值在本例的效果也比 ostu效果要好,可以嘗試一下。

尋找所有的輪廓,首先根據輪廓的面積大小去除一部分區域

兩圖對照,可以發現根據面積約束以後,丟掉了一些東西。一方面是哪些被堵起來的管子;一方面是哪些和旁邊的陰影合在一起的管子。這個需要專門來做,並且根據先驗知識來進行約束。當期的進行找圓操作並且限制半徑大小後得到這樣的結果。

主要存在的干擾就是孔洞之間被識別出來構成的圓。

四、難點攻關:

一、去除識別結果中的干擾,主要是管子和管子之間的間隙造成的誤識別

主要採用的方法是識別出各輪廓的外接橢圓。對於那些錯誤識別的地方,它們的外界橢圓總是可能不規則的,或者是過大、或者是長寬比失調。通過這個方法可以提出一部分干擾。留下的那些都是本身非常近視於圓的地方了。

boolellipselikecircle(rotatedrect rotatedrect)

if(min(width,height)

>20*

1. 2)

return

true;

}

二、將影象中的那些被堵起來的部分,採用相反的方法進行識別,最後將結果疊加在一起

另一幅(要調整閾值)

四、小結反思:

對於此類直接取圖於實際,也利用於實際的專案(對比與生產線上的那種大規模批量的)來說,我認為做成半自動的要比全自動的效果要好。畢竟影象質量放在那裡,無論向那個方向優化都很容易做成過度優化,而且演算法的優化也會很複雜。

但是最終得到有用的結果才是重要的,才是有價值的。與其做成全自動的不如將影象識別做成輔助識別的一部分,將那些重複性的工作(比如識別哪些容易識別的管子)由機器來做,將哪些複雜的識別交給人來做,這樣在提供工作效率的同時也提高了識別效率。

和此相類似的是現在許多安卓的軟體,在使用的時候,上面都有個框子,要求你把需要識別的影象大概框到這個框子裡面。我也的確認為這樣的現場的運用,最好是用

安卓來執行,但是執行於桌面也是有價值的。這個方面單獨研究。

但是並不能因此而降低對演算法的優化,說到底,演算法優化才是根本。

p.s 在

[blog 演算法原理]選擇輪廓(select_shape) 中,我研究了關於如何模仿halcon的形式進行輪廓的大小和圓的特性的判斷,也能夠得到不錯的效果,有興趣可以看一看。

同時,在「鋼管識別專案2」中,我對採用gui介面輔助識別進行了一些研究。

鋼管識別專案1

鋼管識別專案1 一 原始需求 二 初步分析 鋼管的特點是由於其是有深度的,這就造成了管子的內部形成乙個陰影。尋找並識別這個陰影,是解決問題的主要方法。同時需要注意到的一點是管子它本身的排列是有符合物理特性的,就是大體上要符合下圖的這種情況,這是個先驗知識。干擾在於這個陰影不僅是管子內部才有的,管子和...

鋼管識別專案2

鋼管識別專案2 一 需求 將 鋼管識別專案1 中識別出來的結果匯入csharp的gui中,通過手工輔助操作,對識別的結果進行修正。二 初步分析 現在已經實現了影象處理的相關演算法,能夠自動處理影象得到上圖的結果,那麼下面需要做的就是 2.1 傳遞結果到csharp中去 採用的方法是比較熟悉的 csh...

鋼管識別專案2

鋼管識別專案2 一 需求 將 鋼管識別專案1 中識別出來的結果匯入csharp的gui中,通過手工輔助操作,對識別的結果進行修正。二 初步分析 現在已經實現了影象處理的相關演算法,能夠自動處理影象得到上圖的結果,那麼下面需要做的就是 2.1 傳遞結果到csharp中去 採用的方法是比較熟悉的 csh...