MATLAB:在圆圈内显示图像

时间:2014-09-02 19:59:40

标签: matlab image-processing shapes image-recognition

作为圆形识别程序的一部分,我有一个带有已知坐标和半径的几何圆的背景图像。我希望圆圈的内部部分由图像填充,外部单独留下。我最好的想法是某种圆形面具,但我不确定这是最好的方法。有什么建议吗?

X = imread('X.jpg'); % Background image jpg
Y = imread('Y.jpg'); % Filling image jpg
cent = [100,100]; % Center of circle
rad = 20; % Circle radius

% Fill circle ?
...

由于机密性,我没有提供扩展代码。

1 个答案:

答案 0 :(得分:3)


我认为困难的部分是由任何人撰写的:http://matlab.wikia.com/wiki/FAQ#How_do_I_create_a_circle.3F

假设:

  • 我假设您不会指定超出图像范围的点(即我不在此处添加验证)。
  • 我使用背景图像将圆圈的“中心”与坐标相关联。
  • 我假设半径是像素。
  • 我没有使用已知半径的圆创建背景图像,因为我认为没有必要创建您正在寻找的填充效果(除非我遗漏了某些东西)。

代码:

X = imread('rdel_x.png'); % Background image jpg (I used a random image but this can be your blank + geometric circle)
Y = imread('rdel_y.png'); % Filling image jpg
cent = [100,150]; % Center of circle
rad = 70; % Circle radius

% make a mesh grid to provide coords for the circle (mask)
% taken from http://matlab.wikia.com/wiki/FAQ#How_do_I_create_a_circle.3F
[columnsInImage rowsInImage] = meshgrid(1:size(X,2), 1:size(X,1));

% circle points in pixels:
circlePixels = (rowsInImage - cent(1)).^2 ...
    + (columnsInImage - cent(2)).^2 <= rad.^2;
circlePixels3d=repmat(circlePixels,[1 1 3]); % turn into 3 channel (assuming X and Y are RGB)


X((circlePixels3d)) = Y((circlePixels3d)); % assign the filling image pixels to the background image for pixels where it's the desired circle
imagesc(X);
axis image off

结果:从左到右,背景图片,填充图片,上述代码的结果。

enter image description here

编辑:如果所有内容都封装在您的坐标中,您可能甚至不需要背景图像。例如尝试将此附加到上面的代码......

Z=zeros(size(X),'uint8'); % same size as your background
Z(circlePixels3d) = Y(circlePixels3d);
figure; % new fig
imagesc(Z);
axis image off

enter image description here