如何使用matlab进行圆形裁剪?

Aep*_*din 5 matlab image-processing

我通常imcrop用来裁剪rectanguler图像,但我想创建圆形裁剪.怎么做?

我知道有关于此的另一个问题,这里的链接:

  1. MATLAB:如何从图像中裁剪出圆圈

    [xx,yy] = ndgrid((1:imageSize(1))-ci(1),(1:imageSize(2))-ci(2));
    mask = (xx.^2 + yy.^2)<ci(3)^2;
    
    Run Code Online (Sandbox Code Playgroud)

    结果imshow(mask)是带有白色背景的矩形

  2. 在MATLAB中的一个点周围裁剪感兴趣的圆形区域

    错误 roimaskcc

  3. http://www.mathworks.com/matlabcentral/newsreader/view_thread/242489

    [xx,yy]=ndgrid(1:size(X,1), 1:size(X,2));
    CroppingMask= ( (xx-Xcenter).^2+(yy-Ycenter).^2<=Radius^2 );
    X=X.*CroppingMask;
    
    Run Code Online (Sandbox Code Playgroud)

    结果imshow(CroppingMask)是一个黑色背景的矩形,矩形中心有一个小的白色圆形.当我运行第3行时,它显示错误.

请一步一步帮助我,因为我是初学者.

这是我的形象:https://www.dropbox.com/s/5plqzqgyb1ej6gh/patricia.jpg.它的分辨率是480x640.

mag*_*ags 7

解决方案(1)运行良好.这是一个使用您的图像的完整工作示例.

I = imread('patricia.jpg');
imageSize = size(I);
ci = [250, 300, 100];     % center and radius of circle ([c_row, c_col, r])
[xx,yy] = ndgrid((1:imageSize(1))-ci(1),(1:imageSize(2))-ci(2));
mask = uint8((xx.^2 + yy.^2)<ci(3)^2);
croppedImage = uint8(zeros(size(I)));
croppedImage(:,:,1) = I(:,:,1).*mask;
croppedImage(:,:,2) = I(:,:,2).*mask;
croppedImage(:,:,3) = I(:,:,3).*mask;
imshow(croppedImage);
Run Code Online (Sandbox Code Playgroud)

它产生以下图像.

croppedImage

我希望这能澄清事情.可能有一种更好的方法来重新组合裁剪后的图像,但这是我能想到的.