在Matlab中实现图像的平均曲率流(MCF)

时间:2011-06-21 14:21:58

标签: matlab

我需要编写一个Matlab程序,其中我需要能够计算图像的高斯梯度,然后使用以下公式计算平均曲率流(MCF):

k = {[(Ix^2)(Iyy)] - [2IxIyIxy] + [(Iy^2)(Ixx)]} / {[(Ix^2)(Iy^2)]^ 3/2}

我能够计算高斯梯度,但我需要一些帮助来理解这个公式以及如何使用Matlab实现这一点的建议。我非常感谢您提供的任何指导/帮助!

2 个答案:

答案 0 :(得分:1)

您可以查看Peter Kovesi Harris corner detectionMATLAB functions for Computer Vision部分(与您的实施方式非常相似)。特别是这部分:

% Compute derivatives and elements of the structure tensor.
[Ix, Iy] = derivative5(im, 'x', 'y');
Ix2 = gaussfilt(Ix.^2,  sigma);
Iy2 = gaussfilt(Iy.^2,  sigma);    
Ixy = gaussfilt(Ix.*Iy, sigma);    

我希望他们能够直截了当地实施你给出的公式。

答案 1 :(得分:0)

也许这可以帮到你。

%mean curvature
function H = MeanCurvature(im)

  Ix = Dx(im); 
  Iy = Dy(im);
  Ixx = Dx(Ix);
  Iyy = Dy(Iy);    
  Ixy = Dx(Iy);
  H = ((1 + Ix.^2).*Iyy - 2*Ix.*Iy.*Ixy+(1 + Iy.^2).*Ixx)./(2*(1 + Ix.^2 + Iy.^2))^(3/2);

end

function d = Dx(u)

  [row,column,p] = size(u);
  d = zeros(row,column,p); 
  d(:,2:column,:) = u(:,1:column-1,:) - u(:,2:column,:);
  d(:,1,:) = u(:,1,:) - u(:,column,:);

end

function d = Dy(u)

  [row, column, p] = size(u);
  d = zeros(row, column, p);
  d(2:row,:,:) = u(1:row-1,:,:) - u(2:row,:,:);
  d(1,:,:) = u(1,:,:)-u(row,:,:);

end