找到三维形状之间的重叠区域

时间:2013-05-02 16:24:10

标签: matlab image-processing

我正在绘制两个彼此重叠的独立三维无定形斑点。我通过变形单位圆来创建斑点(正如您在下面提供的代码中看到的那样)。我的问题是:是否有一种简单的方法来隔离重叠区域?我需要隔离重叠区域,然后以不同方式对其进行着色(例如,区域为绿色)以清楚地显示重叠的位置。我的实际程序有很多重叠的形状,但为了简单起见,我已经生成了以下代码来说明我想要做的事情:

% Create Sphere with 100 points
N = 100;                 % sphere grid points
[X,Y,Z] = sphere(N);     % get x,y,z coordinates for sphere
num=size(X,1)*size(X,2); % get total amount of x-coordinates (m*n)

% Loop through every x-coordinate and apply scaling if applicable
for k=1:num              % loop through every coordinate
   value=X(k);           % store original value of X(k) as value
   if value<0            % compare value to 0
      X(k)=0.3*value;    % if < 0, scale value
   end
end

% Loop through every z-coordinate and apply scaling if applicable
for k=1:num              % loop through every coordinate
   value=Z(k);           % store original value of X(k) as value
   if value>0            % compare value to 0
      Z(k)=0.3*value;    % if < 0, scale value
   end
end

mesh(X,Y,Z,'facecolor','y','edgecolor','y','facealpha',...
    0.2,'edgealpha',0.2); 
hold on
mesh(-1*(X-1),Y,Z,'facecolor','r','edgecolor','r','facealpha',...
    0.2,'edgealpha',0.2); 
hold off
axis equal

我没有必要寻找代码,只是一种有效的算法或过程来实现所需的结果,因为我需要将这个结果调整到我更复杂的程序中。

2 个答案:

答案 0 :(得分:1)

在绘制对象时,保持整数数组(n维),增加数组中的每个对应点。完成后,循环遍历数组,并且每个元素> 1在两个或多个对象之间有重叠,使用数组坐标根据重叠的数量为对象着色。

答案 1 :(得分:0)

我使用MATLAB内置函数inpolygon进行2D工作以找出重叠区域。但是,它本身不支持3d。我建议你尝试inhull函数,你可以在文件交换时找到here。请注意它只支持凸壳。

如果这对你没有帮助,也许你会在this讨论中找到一些灵感。