You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中将相对距离划分为三个等距区域?

3D距离图三等分区域划分问题

现有两张3D距离图:

  • Dmap_Vent:从某点向外的距离图(起点值为0,终点为代表该点最大距离的数值)
  • Dmap_Cort:反向距离图(起点为最大值,终点为0,代表到对立点的距离)
    二者存在等距点(即到两个起点距离相等的位置)。原本可通过两图差值的正负划分两个区域,但现在需要划分三个等距区域。此前尝试的MATLAB代码因零交叉点逻辑错误失效,现寻求可行实现方法,相关理论可参考指定论文。

原尝试代码

function Out = test_wmhs_BD(Mask_WMH,Mask_WM,Dmap_Vent,Dmap_Cort)

if ~isequal(size(Mask_WMH),size(Mask_WM),size(Dmap_Vent),size(Dmap_Cort))
    disp('Dimension of inputs must match.');
    Out=[];
    
else
    bd=Dmap_Cort-Dmap_Vent;
    bdThird = bd/3;
    Out((bd < bdThird) && Mask_WMH==1) = 1;
    Out((bdThird <= bd) <= bd-bdThird && Mask_WMH==1) = 2;
    Out((bd > bd-bdThird) && Mask_WMH==1) = 3;
       
end

问题分析与修正方案

原代码的核心错误是误用差值bd的1/3作为阈值,逻辑完全偏离了"三等分距离区间"的需求。正确思路是基于相对距离比例划分:对于每个有效点,Vent到Cort的总距离为Dmap_Vent + Dmap_Cort,按该点到Vent的距离占总距离的比例,将区域三等分。

修正后的MATLAB代码

function Out = test_wmhs_BD(Mask_WMH,Mask_WM,Dmap_Vent,Dmap_Cort)

if ~isequal(size(Mask_WMH),size(Mask_WM),size(Dmap_Vent),size(Dmap_Cort))
    disp('输入维度必须匹配。');
    Out = [];
    return;
end

% 初始化输出矩阵,默认值为0
Out = zeros(size(Mask_WMH));

% 计算Vent到Cort的总距离(每个点的总距离一致)
D_total = Dmap_Vent + Dmap_Cort;
% 筛选有效索引:排除总距离为0的点,且仅保留Mask_WMH标记的区域
valid_idx = D_total > 0 & Mask_WMH == 1;

% 计算当前点到Vent的距离占总距离的比例
ratio = Dmap_Vent(valid_idx) ./ D_total(valid_idx);

% 划分三个等距区域
Out(valid_idx & ratio < 1/3) = 1;          % 靠近Vent的1/3区域
Out(valid_idx & ratio >= 1/3 & ratio <= 2/3) = 2;  % 中间1/3区域
Out(valid_idx & ratio > 2/3) = 3;          % 靠近Cort的1/3区域

end

关键说明

  1. 以相对比例划分区域,确保三个区间的距离跨度完全相等;
  2. 处理了D_total=0的异常情况,避免除以0报错;
  3. 严格基于Mask_WMH掩码筛选目标区域,仅在指定范围内执行划分。

内容的提问来源于stack exchange,提问作者CamH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:04:55