具有多个水平集的垂直堆叠层的图像分割

时间:2015-11-04 17:46:09

标签: matlab image-processing image-segmentation medical

到目前为止,我正在使用基于区域的活动轮廓分割 Chan Vese从论文“无边缘的活动轮廓”中分割出像synthesized Image without any noise

这样的图片

这张照片非常理想化(无噪音),简单的边缘检测算法将无法使我的OCT图像具体化。

但是当我在不同位置初始化多个关卡设置函数时,关卡设置总是被相同的高对比度边缘吸引。

result of the chan-vese segmentation

这是我的代码的一部分

lambda_in = lambda; lambda_out = lambda;
%Initialize with large box around perimeter of image.
Phi(1:m,1:n) = -1;  Phi(2:m-1,2:n-1)=1;
for t = 0:dt:T
%Approximate derivatives
Phi_x = (Phi(:,[2:n,n]) - Phi(:,[1,1:n-1]))/2;
Phi_y = (Phi([2:m,m],:) - Phi([1,1:m-1],:))/2;
Phi_xx = Phi(:,[2:n,n]) - 2*Phi + Phi(:,[1,1:n-1]);
Phi_yy = Phi([2:m,m],:) - 2*Phi + Phi([1,1:m-1],:);
Phi_xy = ( Phi([2:m,m],[2:n,n]) + Phi([1,1:m-1],[1,1:n-1]) - Phi([1,1:m-1],[2:n,n]) - Phi([2:m,m],[1,1:n-1]) ) / 4;

%Total variational term = Num/Den "Curvature of the contour"
Num = Phi_xx.*Phi_y.^2 - 2*Phi_x.*Phi_y.*Phi_xy + Phi_yy.*Phi_x.^2;
Den = (Phi_x.^2 + Phi_y.^2).^(3/2) + a;

%Compute average value.
c_in = sum([Phi>0].*f)/(a+sum([Phi>0])); %inside the contour
c_out = sum([Phi<0].*f)/(a+sum([Phi<0])); %outside the contour

%Add to previous iteration of u.
force = dt*epsilon./(pi*(epsilon^2+Phi.^2)).*( Num./Den  - lambda_in*(f-c_in).^2 + lambda_out*(f-c_out).^2);
Phi = Phi + force;

%Plotting ...
end

之前的知识是该层永远不会叠加,并且大多数是垂直堆叠的。

所以我要求一个用于惩罚不同关卡集函数之间间距的术语,这样水平集函数就不会被相同的边缘所吸引。

有人这样做过吗?无论如何,水平集函数适用于这种情况吗?

0 个答案:

没有答案