灰度圖像中如何提取模糊邊緣,進行精確計數?

以下面這幅小圖像為例

人眼可以看出圖中有5條桿菌,但是由於拍攝問題中間幾條細菌比較「黑」,所以二值化之後是這樣

想用邊緣檢測提取進行計數,但是邊緣連續性很差

所以有什麼辦法能準確的計數,並且標示出每個細菌佔據的像素嗎?


這種模糊邊緣不能用edge detection,應該用matting的方法。比如著名的Poisson Matting。

https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/poissonmatting_siggraph04.pdf


如果重點在於計數的化,可以使用形態學的方法處理。 利用膨脹腐蝕提取目標區域,然後連通區域分析數目。


對灰度圖像的降噪和二值化之後的填充、連通處理應該是必須的,不然這樣直接去檢測識別效果不好是肯定的,要根據實際情況考慮考慮哪些地方需要加入什麼樣的處理過程。高級的準確的多的方法也有,但是個人感覺搞個這課題去用深度學習啥的有點大材小用,過於複雜。

用matlab做過圖像處理

提供幾個函數做參考

imfill 填充操作

imclose 閉運算

bwlabel 標記連通區域

regionprops 求連通區域屬性(中心、面積、長寬、周長等等)


可以試一下亞像素,不過感覺效果也不會很好。。


用Unet最合適了


我覺得可以先用 gaussian blur 試試sharpen 那些edge


用imagej試試?如果分離比較開的話用imagej先做segmentation,然後particle analyzer可以達到你的要求。如果重合大的話就不好弄了,理論上當然可以手工分割……但成千上萬就不現實了。

剛回去看了以前做過的(不是做細胞/微生物的)東西,或許可以用imagej(or Fiji)下載這個軟體的ITCN plugin試試。

另外有econgnition 的話可以更好的滿足你的要求,就是上手複雜些,並且收費。


推薦閱讀:

傅立葉變換頻譜圖怎麼看?
圖像配准問題…也就是如何用C++編程實現在一個大矩陣里尋找一個與它一個子矩陣最為相似的一個等維小矩陣?
FPGA圖像處理的前景如何?
照相的時候,三維世界映射到二維圖像,丟失了哪些信息?
請問超像素(Superpixel)的大致原理?

TAG:圖像處理 | 二值化演算法 | 邊緣檢測演算法 | 細菌 | 顯微圖像 |