MATLAB中不用循环生成圆盘(圆形)/圆环掩膜矩阵

           由于在计算中,经常需要生成圆盘(or叫圆形?)掩膜,所以特意写了一个生成圆盘的matlab函数,当然经过修改,也可以生成圆环函数。

       譬如,我们想在一个矩阵里提取以某一点为圆心,半径r内的元素,让这个圆范围外的元素都为0时,这就需要一个圆盘掩膜。但是按普通人的第一直觉都是利用对行和列的两重循环,把矩阵内的每一个元素都遍历一遍,看是否在圆内,如果在的话,赋值为1,不在的话,赋值为0 。对于这种传统做法,明显采用了两重循环,会大大降低matlab程序的效率,那有没有不用循环的方法呢?

       下面就讲如何不用循环生成圆盘掩膜:

        假设矩阵大小为512*512 ,取矩阵最中间一点为圆心,半径r=50。先用函数meshgrid生成矩阵对应的每一个坐标,然后用circle=x.^2+y.^2生成代表半径的平方的矩阵,最后用find函数找到符合要求的元素,赋值为1,不符合要求的赋值为0 。具体程序如下:

 

m=512; %矩阵的函数
n=512; %矩阵的列数
r=50;   %生成圆的半径
m1=-m/2:m/2-1;   %把圆心变到矩阵的中间
n1=-n/2:n/2-1;
[x,y]=meshgrid(m1,n1);
circle=x.^2+y.^2;   %计算出每一点到圆心的距离的平方

circ_mask=zeros(m,n);  
circ_mask(find(circle<=r*r))=1;  %找到圆内的元素,并复制为1
circ_mask(find(circle>r*r))=0;   %找到圆外的元素,并复制为0

figure;
imshow(255*circ_mask);

 

    程序运行结果如下:


     另外,如果要生成圆环的话,只需要把find函数那里做相应的改变即可。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值