形態學是一種比較新的影象處理方法,它可以以一種特定的形態和結構元素作為樣本提取出對應的形狀,從而得到我們所需要的結構,且它包含有四種基本操作:膨脹、腐蝕、以及開閉操作。基於這些操作,我們可以實現對眼底血管的提取。
laplace運算元是常用的邊緣檢測運算元,是一種簡單的各向同性的微分運算元,它的作用是銳化灰度發生跳變的區域,所以它可以幫助我們檢測到血管邊緣。
眼底血管可以看作由一條條較小的線段組成,因此可以利用形態學操作提取血管。提取方法過程如下:
匯入原圖,對影象進行灰度處理,結果如圖1所示:
圖1:原圖 灰度化眼底影象
為後續方便處理,將影象灰度化後去反,結果如圖2所示:
圖2:灰度取反
如圖2所示,眼底血管較粗的地方相對於背景來說比較清晰,但是較細的部分與背景的灰度差太小,不容易辨別。為了更好的後續操作,顯然需要對血管進行增強。所以需要用到形態學方法增強血管,形態學方法:因為血管可以看作很多小線段組成的,故選取小線段作為結構元素,由於血管的方向不是固定的,所以需要多方向提取特徵,故而讓小線段旋轉12個角度,每個角度相差15°。然後我們會得到12張圖,只需要挑選每乙個畫素點是12張圖中所對應的畫素點最大的乙個組合起來。
結果如圖3:顯然血管較圖2來說比較清晰。
圖3:血管增強
相比較於圖2與圖3會發現較小的血管有部分消失了,這是因為在形態學處理時被去除了,所以我們需要將它重建出來:首先以圖2作為模板,再以圖3作為恢復物件,恢復出小血管。結果如圖4:
圖4:膨脹重建
從圖4看,影象左邊存在乙個較黑的點(視盤),影象也存在乙個反光點。而我們只需要眼底血管,若不將它們去除,將會影響我們後續提取血管後的質量。將它們去除的方法也很簡單,這需要求影象的背景,然後用影象減去背景圖便可獲得只有血管的背景圖。
求背景圖,即是將影象完全糊化,方法有很多種,我們利用求多次形態學分析,將影象完全糊化,求得背景圖,再用原圖減去背景圖。
結果如圖5:
圖5:背景圖 粗略圖
從圖5的粗略圖上看,血管大體上是已經被提取出來了,但缺點很顯然:對比度太低,色調太暗,血管相比較背景來說有些看不清。若是直接通過閾值變換得到的效果不佳,存在很多雜訊。故而選用laplace運算元提取特徵。選用二階laplace運算元導數,因為它相對於一階的laplace運算元來說對細節更為敏感,對於細線能較好的提取出來。
因為二階laplace運算元對雜訊很是敏感,在進行特徵提取前,需要對影象進行平滑處理.。
結果圖6:顯然即使經過平滑處理後依然存在很多雜訊,但也明顯看到血管被清楚的提取出來,所以接下來我們需要將雜訊去除,進行低通高斯濾波,減少一部分雜訊,得圖7:
圖6:高斯平滑濾波 特徵提取
圖7:低通高斯濾波
我們通過觀察圖7,顯然存在很多雜訊。但通過分析發現,血管是有線條狀,雜訊都不具備線條狀的條件。這時候顯然可以使用形態學分析,將線條狀的血管提取出來,同樣使用之前的辦法,每個線間隔15°提取得圖:
圖8:血管提取
閉運算在數學上是先膨脹再腐蝕的結果,閉運算的物理結果會平滑物件的輪廓,同時也將狹窄的缺口連線起來形成細長的彎口。
通過對圖8影象分析,我們發現血管結構已經算是提取出來了,但通過細緻一點的觀察,發現血管有些細小部分存在斷裂現象,故而需要用閉運算將它們連線起來。
結果如圖
9:
圖9:閉運算
通過圖9的分析上看,影象已經接近我們的預期目標了。但通過細緻的分析,影象存在一些很小的,零散的小線條,為了更好的去除它們,通過閾值處理將它們去除。閾值化的方法有很多,我們選用滯後性閾值法。
即對影象取兩次閾值化,一次取較小的,一次取較大的閾值化。再用小的作為模板對另乙個影象進行膨脹重建,最終得圖如下:
圖10:眼底血管
從以上三幅結果圖中 可以看出該方法對眼底的大部分血管都能進行有效提取, 但是通過細微的比較之後發現本演算法還有待有待進一步的改進和完善。在較細的血管提取上在較細的血管提取上可能存在斷裂,或者消失,無法進行有效提取可能存在斷裂,或者消失,無法進行有效提取等等。
基於opencv cuda實現形態學
opencvsharp 讀入 初始化 mat open map newmat mat close map newmat mat erode map newmat mat dilate map newmat 膨脹核 要為奇數 int size 5 mat se cv2.getstructuringel...
形態學重建
在形態學梯度影象的基礎上,利用形態學的開閉重建運算對梯度影象進行重建,在保留重要區域倫敦的同時去除細節和雜訊。分水嶺變換存在過分割現象,原因在於檢測的區域性極值過多,造成極值過多的原因在於影象中的非規則灰度擾動和雜訊。對於好的分水嶺影象分割方法,不僅能消除過分割現象,而且應保證分割後的區域倫敦邊緣具...
形態學濾波
include pch.h include include include include using namespace std using namespace cv 形態學 mat g srcimage,g dstimage int g nelementshape morph rect int ...