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

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

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

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

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

 

  1. m=512; %矩阵的函数  
  2. n=512; %矩阵的列数  
  3. r=50;   %生成圆的半径  
  4. m1=-m/2:m/2-1;   %把圆心变到矩阵的中间  
  5. n1=-n/2:n/2-1;  
  6. [x,y]=meshgrid(m1,n1);  
  7. circle=x.^2+y.^2;   %计算出每一点到圆心的距离的平方  
  8.   
  9. circ_mask=zeros(m,n);    
  10. circ_mask(find(circle<=r*r))=1;  %找到圆内的元素,并复制为1  
  11. circ_mask(find(circle>r*r))=0;   %找到圆外的元素,并复制为0  
  12.   
  13. figure;  
  14. imshow(255*circ_mask);  

 

    程序运行结果如下:

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

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