2013-08-06 148 views
1

我正在開發一個工具,可以讓您在三維「體積」上圍繞/包圍物體。我想通過標記「切片」1和3以及從該信息「填充」切片2來節省時間。在三維空間中的兩個平面之間插值

兩個簡單的解決方案是:

1. slice2 = slice1 AND slice3 (gets the overlap between the two) 
2. slice2 = slice2 OR slice3 (true for any pixel true in either image) 

這些 OK,速度快,但我寧願做一些通過使形狀某種兩者之間的平均/插值更智能。 你可以把它想象成試圖找到連接飛機的懸崖表面,在高空和高空觀看。

示例:從此3d矩陣填充切片2-4。 (使用montage創建) slices one through five

隨意想出全新的想法。我將把我的想法放在下面。

我想過的一些東西可能會幫助你,回答者,但我一直無法成功地使用。
- 您可以在每張圖片上做一個bwperim。
- 您可以嘗試「平均」圖像(或加權平均值)。

到目前爲止,我已經得到了最好:

添加圖像。 給你重疊和兩個周長:
-內部周長(內部肯定會是1)
- 和一個外圍(內部是有問題的)。
您還可以遮罩> 0和< 2的區域,這是此可疑區域的遮罩。
運行兩個周邊圖像上的bwdist和掩蓋了:

masked bwdist image

不知道如何從這裏走,雖然。沿着該區域採用「最大」輪廓的線條可行,但我不確定如何強有力地做到這一點。

歡迎任何關於解決我的想法或任何其他想法的想法!

謝謝。

+1

使用'bwmorph(面具, 'skel中',INF)使得一個確定的答案。 爲了做到這一點,我將它應用到切片[1 5]以獲得切片3.然後切片[1 3]以獲得2 ... – Frederick

回答

2

Schenk等人在閱讀 「醫學圖像中3D對象的有效半自動分割」之後,我今天想到了這一點。人。

這裏是我寫的函數:

function out = interp_shape(top,bottom,num) 


if nargin<2; 
    error('not enough args'); 
end 
if nargin<3; 
    num = 1; 
end 
if ~num>0 && round(num)== num; 
    error('number of slices to be interpolated must be integer >0'); 
end 

top = signed_bwdist(top); % see local function below 
bottom = signed_bwdist(bottom); 

r = size(top,1); 
c = size(top,2); 
t = num+2; 

[x y z] = ndgrid(1:r,1:c,[1 t]); % existing data 
[xi yi zi] = ndgrid(1:r,1:c,1:t); % including new slice 

out = interpn(x,y,z,cat(3,bottom,top),xi,yi,zi); 
out = out(:,:,2:end-1)>=0; 

function im = signed_bwdist(im) 
im = -bwdist(bwperim(im)).*~im + bwdist(bwperim(im)).*im; 

enter image description here