圖像分割(segmentation)是一種非常常用的技術,這種技術能夠把你想要研究的東西和不相關的東西給分離開來,比如我們經常用photoshop把照片的人取出來然后換個背景或者其他ps一下,這個就是圖像分割,但是這個領域研究的都是自動圖像分割技術,不需要人工去分。現在已經提出的自動圖像分割方法有很多種,但是只能解決一部分的問題,有些圖像還必須人工去分,所以挑戰依舊存在,新的方法依舊不斷被提出。
出於一些醫療上的目的,經常需要對一些醫療成像的血管圖像進行分割,提取出血管部分,來進行進一步的研究,所以血管分割作為圖像分割中的一類,有很多關專門解決這個問題的算法被提出。而本文將要介紹的方法就屬於所有血管分割方法中的一種,這種方法基於一種叫做匹配濾波器(matched filter)的東西。這種方法早在1989年就已經被提出[1],本文其實也是對這個論文的總結和實現,有很多基於這篇論文的改進算法。
這個方法的靈感來自與信號處理中的匹配濾波器。按照百度百科中將的,匹配濾波器的性能與信號的特性取得某種一致,能夠使濾波器輸出端的信號瞬時功率與噪聲平均功率的比值最大,即當信號與噪聲同時進入濾波器時,它使信號成分在某一瞬間出現尖峰值,而噪聲成分受到抑制。要想設計匹配濾波器,信號的波形必須是已知的。如果將血管圖像看做一個信號,雖然這個信號的具體情況不得而知,但是血管的特點是已知的,基於這點先驗知識可以針對血管設計匹配濾波器,那么按照匹配濾波器的原理,當血管部分輸入時會出現較大值,而當背景區域輸入時將出現較小值,從而將靜脈與血管分開。
根據以上的分析,我們需要研究血管的特點。血管有以下特點:血管的寬度只在較小的范圍內變動,血管壁的兩條線是平行的,血管有方向,而跟深入的分析血管圖像,還可以發現血管橫切線上的灰度曲線是一個下面這個樣子的:
根據以上血管的特點,文章[1]中提出了一種匹配濾波器的設計方法。先將血管想象成一小段一小段的平行區域的組合,設定長度為L,寬度為2sigma,然后用一個倒過來的高斯曲線來模擬上面血管橫切線灰度曲線, 從而得到匹配濾波器如下:
因為血管是有方向的,所以在此濾波器的基礎上進行沒15度旋轉一次,得到一個從0度到180度的12個匹配濾波器,然后分別進行卷積,每個像素的值為響應最大的那個濾波器得到的值。濾波之后,在采用一個全局的閾值進行過濾,大小各分一邊,得到一個二值化的血管圖像。
上面是只是簡單的進行了介紹,還有很多細節沒有提出,具體的方法參照論文。
下面是matlab代碼:
function [g,bg]=matchedFilter2(f) f=double(f); % mean filter f=medfilt2(f,[5,5]); f=medfilt2(f,[21 1]); f=medfilt2(f,[1,7]); % 參數 os=12; % 角度的個數 sigma=10; tim=4; L=9; t=70; % threshhold thetas=0:(os-1); thetas=thetas.*(180/os); N1=-tim*sigma:tim*sigma; N1=-exp(-(N1.^2)/(2*sigma*sigma)); N=repmat(N1,[2*floor(L/2)+1,1]); r2=floor(L/2); c2=floor(tim*sigma); [m,n]=size(f); RNs=cell(1,os); % rotated kernals MFRs=cell(1,os); % filtered images g1=f; % matched filter for i=1:os theta=thetas(i); RN=imrotate(N,theta); %去掉多余的0行和零列 RN=RN(:,any(RN)); RN=RN(any(RN'),:); meanN=mean2(RN); RN=RN-meanN; RNs{1,i}=RN; MFRs{1,i}=imfilter(f,RN,'conv','symmetric'); end % get the max response g=MFRs{1,1}; for j=2:os g=max(g,MFRs{1,j}); end bg=g<t; end
里面三個參數sigma,L,T的選擇需要針對不同的應用去嘗試,如果與論文中一樣分割的是視網膜血管圖像,參數可以不變即2,9,3。而我做的是對手部靜脈的分割,所以參數是上面代碼所顯示。至於全局閾值t的選擇,最粗獷最常用的方法就是試幾次找最好的,當然也有其他找這個閾值的方法。至於這個方法的性能,我覺得還是不錯的。但是,為了取得好的結果預處理和后續處理也是必不可少的。
[1] S. Chaudhuri, S. Chatterjee, N. Katz, M. Nelson, M. Goldbaum, Detection of blood vessels in retinal images using two dimensional matched filters, IEEE Trans. Med. Imaging 8 (3) (1989) 263–269.