compute_saddle_points.m.svn-base

来自「fast marching method」· SVN-BASE 代码 · 共 61 行

SVN-BASE
61
字号
function [vertex,faces] = compute_saddle_points(Q,D,mask)% compute_saddle_points - compute saddle points of a Voronoi segmentation%%   [vertex,faces] = compute_saddle_points(Q,D[,mask]);%%   Q is a voronoi index map.%   D is the distance function associated to the voronoi map.%%   The vertex of the saddle points are first the double points (meeting%   points of the voronoi diagram along the boundary of the domain) and%   then the triple points (meeting points of 3 cells).%%   Copyright (c) 2008 Gabriel Peyreif nargin==3 && not(isempty(mask))    Q(mask==0) = -1;endQ1 = zeros(size(Q)+2)-1;Q1(2:end-1,2:end-1) = Q;V = [];v = Q1(1:end-1,1:end-1); V = [V v(:)];v = Q1(2:end,1:end-1); V = [V v(:)];v = Q1(1:end-1,2:end); V = [V v(:)];v = Q1(2:end,2:end); V = [V v(:)];V = sort(V,2);d = (V(:,1)~=V(:,2)) + (V(:,2)~=V(:,3)) + (V(:,3)~=V(:,4));V = V';I = find(d>=2);[vx,vy] = ind2sub(size(Q)+1, I);vx = clamp(vx,1,size(Q,1));vy = clamp(vy,1,size(Q,1));J = vx+(vy-1)*size(Q,1);% sort according to distance[tmp,s] = sort(D(J), 1, 'descend');I = I(s);[vx,vy] = ind2sub(size(Q)+1, I);vx = clamp(vx,1,size(Q,1));vy = clamp(vy,1,size(Q,1));vertex = cat(1,vx',vy');V = sort(V, 1, 'descend');faces = V(1:3, I);if isempty(vertex)    % add farthest point    [tmp,I] = max( D(:) );    [vx,vy] = ind2sub(size(D), I(1));    vertex = [vx;vy];    faces = [-1 -1 -1]';endI = find( faces(1,:)<0 | faces(2,:)<0 | faces(3,:)<0 );J = find( faces(1,:)>0 & faces(2,:)>0 & faces(3,:)>0 );faces = cat(2, faces(:,I), faces(:,J) );

⌨️ 快捷键说明

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