У меня есть матрица (изображение) и информация об интересной части внутри окружностей (даны центральные кординаты и радиусы). Я хочу вырезать для всех окружностей части матрицы, чтобы сделать некоторые дополнительные вычисления для каждой окружности. Или, по крайней мере, я хочу иметь битовую маску со всеми окружностями.
Я использую Octave (но мог бы также использовать MATLAB, но это было бы сложно из-за лицензионных iusses) и у меня есть следующий скрипт с некоторыми подсказками из stackoverflow. У меня есть информация о 20 кругах, и это занимает около 0,7 с на моем Core i5 с использованием Octave:
% image
dim_x = 1000;
dim_y = 1000;
A=rand(dim_x,dim_y);
% center positions and ...
c = [222 111; 878 112; 81 718; 89 112; 222 111; 878 112; 81 718; 89 112; 222 111; 878 112; 81 718; 89 112; 222 111; 878 112; 81 718; 89 112; 222 111; 878 112; 81 718; 89 112];
%... radii of the circles
r = [10 33 55 2 22 10 33 55 2 22 10 33 55 2 22 10 33 55 2 22];
tic;
for i=1:size(c,1)
% create a bitmask ...
mask = bsxfun(@plus, ((1:dim_y) - c(i,1)).^2, (transpose(1:dim_x) - c(i,2)).^2) < r(i)^2;
% ... cut the circles out of the image
B=A.*mask;
end;
toc;
Знаете ли вы более производительное решение, поскольку я хочу иметь около 600 кругов.
Спасибо заранее