MATLAB-利用逻辑运算对当前矩阵状态一次更新-边界内部填充

本文介绍了如何使用MATLAB的逻辑运算来更新矩阵,避免for循环导致的相邻元素相互影响问题。这种方法可以有效地对边界内部的所有点进行赋值,便于识别点所属的区域。通过获取边界内一点的值并分配区域编号,可以应用此技术来完成区域划分。
摘要由CSDN通过智能技术生成
n=50;
m=50;
k=20;%执行次数

z=zeros(n,m);
ve=z;
number=37;

r=z;  %r为边界 初始化
r([5,45],:)=1;%边界值为1
r(:,[5,45])=1;


ve=r;%veg此时为边界(值均为1)加一个值为37的点
ve(25,25)=37;

for i=1:k
    X=find(ve==1);%寻找边界的序号 保存在X 因为靠近值为37的边界会被更新为37 所以需要还原 每次扩散步长为1 所以不会越出边界
    ve=number*((ve(1:n,[m 1:m-1])==number)|(ve(1:n,[2:m 1])==number)| ...  
(ve([n 1:n-1], 1:m)==number)|(ve([2:n 1],1:m)==number)|(ve(:,:)==number)+z);%(A|B|C|D)括号里面命题ABCD用逻辑词|连接会将矩阵ve转换为逻辑矩阵(只能赋值为0或1)
%所以可以与0矩阵运算一下变为double矩阵
    ve(X)=1; %还原边界值
end
image(cat(3,ve,z,z));

若用for循环 不能产生理想的效果 原因是每一个值更新后 会影响与它靠近的下一个元素 

而逻辑运算利用的数据是默认不变的 然后一次性全部更新


此方法可对区域内部所有点赋值编为相同号  从而方便判断某点处于哪个区域

具体操作可先用ginput()获得边界内部一点值 然后赋值为区域编号 调用上述方法即可

%%%%参数
n=50;
m=50;
k=20;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值