鋼管識別專案1
一、原始需求/:
二、初步分析:
鋼管的特點是由於其是有深度的,這就造成了管子的內部形成乙個陰影。尋找並識別這個陰影,是解決問題的主要方法。
同時需要注意到的一點是管子它本身的排列是有符合物理特性的,就是大體上要符合下圖的這種情況,這是個先驗知識。
干擾在於這個陰影不僅是管子內部才有的,管子和管子之間也會形成陰影;
此外,這些實際的中都存在管子被堵死的情況,這也是需要考慮的。
三、解決方案:
灰度並閾值處理,得到這樣的結果。需要注意的是這裡不要使用ostu。的確ostu很多時候都很好用,但是也有不好用的時候。即使是固定的閾值在本例的效果也比 ostu效果要好,可以嘗試一下。
尋找所有的輪廓,首先根據輪廓的面積大小去除一部分區域
兩圖對照,可以發現根據面積約束以後,丟掉了一些東西。一方面是哪些被堵起來的管子;一方面是哪些和旁邊的陰影合在一起的管子。這個需要專門來做,並且根據先驗知識來進行約束。當期的進行找圓操作並且限制半徑大小後得到這樣的結果。
主要存在的干擾就是孔洞之間被識別出來構成的圓。
四、難點攻關:
一、去除識別結果中的干擾,主要是管子和管子之間的間隙造成的誤識別
主要採用的方法是識別出各輪廓的外接橢圓。對於那些錯誤識別的地方,它們的外界橢圓總是可能不規則的,或者是過大、或者是長寬比失調。通過這個方法可以提出一部分干擾。留下的那些都是本身非常近視於圓的地方了。
boolellipselikecircle(rotatedrect rotatedrect)
if(min(width,height)
>20*
1. 2)
return
true;
}
二、將影象中的那些被堵起來的部分,採用相反的方法進行識別,最後將結果疊加在一起
另一幅(要調整閾值)
四、小結反思:
對於此類直接取圖於實際,也利用於實際的專案(對比與生產線上的那種大規模批量的)來說,我認為做成半自動的要比全自動的效果要好。畢竟影象質量放在那裡,無論向那個方向優化都很容易做成過度優化,而且演算法的優化也會很複雜。
但是最終得到有用的結果才是重要的,才是有價值的。與其做成全自動的不如將影象識別做成輔助識別的一部分,將那些重複性的工作(比如識別哪些容易識別的管子)由機器來做,將哪些複雜的識別交給人來做,這樣在提供工作效率的同時也提高了識別效率。
和此相類似的是現在許多安卓的軟體,在使用的時候,上面都有個框子,要求你把需要識別的影象大概框到這個框子裡面。我也的確認為這樣的現場的運用,最好是用
安卓來執行,但是執行於桌面也是有價值的。這個方面單獨研究。
但是並不能因此而降低對演算法的優化,說到底,演算法優化才是根本。
p.s 在
[blog 演算法原理]選擇輪廓(select_shape) 中,我研究了關於如何模仿halcon的形式進行輪廓的大小和圓的特性的判斷,也能夠得到不錯的效果,有興趣可以看一看。
同時,在「鋼管識別專案2」中,我對採用gui介面輔助識別進行了一些研究。
目前方向:影象拼接融合、影象識別 ****:[email protected]
鋼管識別專案1
鋼管識別專案1 一 原始需求 二 初步分析 鋼管的特點是由於其是有深度的,這就造成了管子的內部形成乙個陰影。尋找並識別這個陰影,是解決問題的主要方法。同時需要注意到的一點是管子它本身的排列是有符合物理特性的,就是大體上要符合下圖的這種情況,這是個先驗知識。干擾在於這個陰影不僅是管子內部才有的,管子和...
鋼管識別專案2
鋼管識別專案2 一 需求 將 鋼管識別專案1 中識別出來的結果匯入csharp的gui中,通過手工輔助操作,對識別的結果進行修正。二 初步分析 現在已經實現了影象處理的相關演算法,能夠自動處理影象得到上圖的結果,那麼下面需要做的就是 2.1 傳遞結果到csharp中去 採用的方法是比較熟悉的 csh...
鋼管識別專案2
鋼管識別專案2 一 需求 將 鋼管識別專案1 中識別出來的結果匯入csharp的gui中,通過手工輔助操作,對識別的結果進行修正。二 初步分析 現在已經實現了影象處理的相關演算法,能夠自動處理影象得到上圖的結果,那麼下面需要做的就是 2.1 傳遞結果到csharp中去 採用的方法是比較熟悉的 csh...