假设矩阵大小为m*n,取矩阵最中间一点为圆心,半径r=m/2。先用函数meshgrid生成矩阵对应的每一个坐标,然后用circle=x .^ 2 + y .^ 2生成代表半径的平方的矩阵,最后用find函数找到符合要求的元素,赋值为1,不符合要求的赋值为0 。具体程序如下:
function [masked_im,circ_mask] = circle_mask(im)
circ_mask=im;
im_size = size(im);
m = im_size(1); % 图像矩阵的行数
n = im_size(2); % 图像矩阵的列数
r = floor(m/2); % 生成圆的半径
m1 = -m/2:m/2-1; % 把圆心变到矩阵的中间
n1 = -n/2:n/2-1;
[x,y]=meshgrid(m1,n1);
circle=x.^2+y.^2; % 计算出每一点到圆心的距离的平方
circ_mask(find(circle>r*r))=0; % 找到圆外的元素,并赋值为0
masked_im = circ_mask; % 这就是被遮掩后的图像
circ_mask(find(circle<=r*r))=1; % 找到圆内的元素,并赋值为1 ,这是图像掩膜
end
下面在主函数中调用该函数:
inputfilename = "E:\shipwreck.jpg";
im = imread(inputfilename);
im = rgb2gray(im); % 转化为灰度图
figure(10)
subplot(1,2,1)
imshow(im)
[im,im_mask] = circle_mask(im);
subplot(1,2,2)
imshow(im)