⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calcspeed.m

📁 Image segmentation script (code)
💻 M
字号:
function speed = calcspeed( phi, K_I, front )
% CALCSPEED Calculate the speed for front points
%    CALCSPEED( phi, front ) Calculates the speed for the points
%    whose coordinates are given in 'front'.

% set epsilon - larger values means curvature should be small
EPSILON = 0.0025;

% grab the number of front points
n = size( front, 1 );

% fill speed matrix with zeros at first
speed = zeros( size( phi ) );

% for every front point
for k = 1 : n;

  % grab the point's coordinates
  i = front( k, 1 ); j = front( k, 2 );

  % calculate the forward differences
  Dx_minus = phi( i, j ) - phi( i, j - 1 );
  Dy_minus = phi( i, j ) - phi( i - 1, j );

  % calculate the backward differences
  Dx_plus = phi( i, j + 1 ) - phi( i, j );
  Dy_plus = phi( i + 1, j ) - phi( i, j );

  % calculate the central differences
  Dx_central = ( phi( i, j + 1 ) - phi( i, j - 1 ) ) / 2;
  Dy_central = ( phi( i + 1, j ) - phi( i - 1, j ) ) / 2;

  % calculate the advection component using upwind schemes
  x_advection = max( Dx_minus, 0 )^2 + min( Dx_plus, 0 )^2;
  y_advection = max( Dy_minus, 0 )^2 + min( Dy_plus, 0 )^2;
  F_advection = sqrt( x_advection + y_advection );

  % calculate the curvature
  phi_x   = Dx_central;
  phi_y   = Dy_central;
  phi_xx  = ( phi( i, j + 1 ) + phi( i, j - 1 ) - 2 * phi( i, j ) );
  phi_yy  = ( phi( i + 1, j ) + phi( i - 1, j ) - 2 * phi( i, j ) );
  phi_xy1 = ( phi( i + 1, j + 1 ) + phi( i - 1, j - 1 ) ) / 4;
  phi_xy2 = ( phi( i - 1, j + 1 ) + phi( i + 1, j - 1 ) ) / 4;
  phi_xy  = phi_xy1 - phi_xy2;

  K_top = phi_xx * ( phi_y^2 ) - ( 2 * phi_x * phi_y * phi_xy ) + phi_yy * ( phi_x^2 );
  K_bot = ( ( phi_x^2 ) + ( phi_y^2 ) )^(3/2);
  K = K_top / K_bot;

  % calculate the remainder force by estimating |grad phi| from
  % sum of squares of central differences
  grad_phi = sqrt( Dx_central^2 + Dy_central^2 );
  F_remainder = K * grad_phi;

  % estimate the final speed term
  %speed( i, j ) = 1 - EPSILON * F_remainder;
  speed( i, j ) = K_I( i, j ) .* ( F_advection - EPSILON * F_remainder );

end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -