2014-03-31 59 views

回答

3

下面這段代碼可以作爲一個起點。

I = load('imagetest.mat'); 
I = I.imagetest; 
I = I./max(I(:)); 
se = strel('disk', 3); 
Io = imopen(I, se); 
Ie = imerode(I, se); 
Iobr = imreconstruct(Ie, I); 
Iobrd = imdilate(Iobr, se); 
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr)); 
Iobrcbr = imcomplement(Iobrcbr); 
bw = im2bw(Iobrcbr, graythresh(Iobrcbr)); 
figure 
imshow(bw, 'InitialMagnification', 'fit') 
title('Binary image') 

輸出是

enter image description here

可以使用watershed命令獲取分開黑色和白色段的分水嶺脊線。可以嘗試的一些參數是形態結構元素(strel命令),graythresh返回的級別以及形態操作的繼承和類型。

希望有所幫助。

+0

謝謝先生。這是很好的代碼 – user3336190

+0

@ user3336190不客氣。 – Drake

2

如果你知道了閾值,最簡單的方法是:

BW = im2bw(I, level) 

其中I爲灰度圖像,並level爲閾值。另一個難度較低的方法是local adaptive threshold。它將基於局部窗口平均強度的閾值決定。再次,這裏沒有什麼特別的東西,最簡單的細分。

2

段沒有一般的定義。有時人們想要從背景或對象或文本的一部分分割對象或前景。你必須定義你想要的分割類型。對於文本,您可以使用adaptive threshold,對於灰度級形狀圖像,可以使用connected components,對於可以使用模糊提示的對象(如果可用),對於顏色場景,可以使用GMM - 高斯混合模型 - 可以是合適的,請參閱grab cut

+0

我正在使用matlab來做到這一點。對於這個問題,我使用了一種先進的技術來分割灰色圖像的一部分。但是這個技術在上面的部分沒有被分割(我在文件中展示了它)。該方法將圖像構建爲能量函數並嘗試優化它。爲了改善它,我發現一些將圖像構建爲能量函數的技術。搶切就是其中之一。但這是非常複雜的時間,需要定義種子點。閾值需要知道閾值。在我的情況下,我想自動構建。我認爲集羣是最好的。你是否認爲這一點。 K-means聚類中的 – user3336190

+0

您必須指定聚類數量。在openCV和Matlab中有這樣的庫函數。 (http://docs.opencv.org/modules/core/doc/clustering.html?highlight=kmean#cv.KMeans2)。如果您還想獨立使用高斯混合模型來模擬每個羣集的範圍。問題是你的數據看起來不像。你的數據代表什麼? – Vlad

+0

我的數據是醫學圖像中的特殊數據。我想我會用多個門檻來做到這一點。它比其他方法更簡單。我會找到如何確定其門檻。在我上面的情況。我會設置閾值是250和300 – user3336190

相關問題