如何在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
关键说明
- 以相对比例划分区域,确保三个区间的距离跨度完全相等;
- 处理了
D_total=0的异常情况,避免除以0报错; - 严格基于
Mask_WMH掩码筛选目标区域,仅在指定范围内执行划分。
内容的提问来源于stack exchange,提问作者CamH
相关产品推荐
相关产品推荐

