作为圆形识别程序的一部分,我有一个带有已知坐标和半径的几何圆的背景图像。我希望圆圈的内部部分由图像填充,外部单独留下。我最好的想法是某种圆形面具,但我不确定这是最好的方法。有什么建议吗?
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 ?
...
由于机密性,我没有提供扩展代码。
答案 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
结果:从左到右,背景图片,填充图片,上述代码的结果。
编辑:如果所有内容都封装在您的坐标中,您可能甚至不需要背景图像。例如尝试将此附加到上面的代码......
Z=zeros(size(X),'uint8'); % same size as your background
Z(circlePixels3d) = Y(circlePixels3d);
figure; % new fig
imagesc(Z);
axis image off