我覺得最困難的部分是由何人所創作完成這件事: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
是在圖像填充的尺寸'Y'一樣的圈?你想讓整個圖像'Y'填充到'X'裏面的圓圈內嗎? – rayryeng 2014-09-02 20:02:00