Насколько я понимаю, у вас есть набор точек, представляющих эллипс, и вы хотели бы нарисовать их непосредственно внутри матрицы изображения (а не просто отобразить их на экране).
Для этого вы можете использовать POLY2MASK функция для преобразования эллипса в двоичную маску.Затем, вычисляя его периметр , мы получим двоичную маску, представляющую только пиксели, составляющие эллипс, который применяется к изображению для установки цвета пикселей.
Рассмотримпример ниже.Я использую функцию CalculateEllipse.m из предыдущего вопроса здесь на SO:
%# some image
I = imread('pout.tif');
sz = size(I);
%# ellipse we would like to draw directly on image matrix
[x,y] = calculateEllipse(100,50, 150,50, 30, 100);
%# lets show the image, and plot the ellipse (overlayed).
%# note how ellipse have floating point coordinates,
%# and also have points outside the image boundary
figure, imshow(I)
hold on, plot(x,y, 'LineWidth',2)
axis([-50 250 -50 300]), axis on
%# create mask for image pixels inside the ellipse polygon
BW = poly2mask(x,y,sz(1),sz(2));
%# get the perimter of this mask
BW = bwperim(BW,8);
%# use the mask to index into image
II = I;
II(BW) = 255;
figure, imshow(II)
Это должно дать вам превосходные результаты дляпросто округляя координаты x
и y
(плюс для нас это обрабатывает внешние границы).Обязательно прочтите раздел алгоритма POLY2MASK, чтобы увидеть, как он работает на уровне субпикселей.
РЕДАКТИРОВАТЬ:
, если вы работаете с изображением RGB (3D-матрица),То же самое относится, вам нужно только изменить последнюю часть, где мы используем двоичную маску:
%# color of the ellipse (red)
clr = [255 0 0]; %# assuming UINT8 image data type
%# use the mask to index into image
II = I;
z = false(size(BW));
II( cat(3,BW,z,z) ) = clr(1); %# R channel
II( cat(3,z,BW,z) ) = clr(2); %# G channel
II( cat(3,z,z,BW) ) = clr(3); %# B channel
figure, imshow(II)
Вот еще один способ:
%# use the mask to index into image
II = I;
BW_ind = bsxfun(@plus, find(BW), prod(sz(1:2)).*(0:2));
II(BW_ind) = repmat(clr, [size(BW_ind,1) 1]);
figure, imshow(II)