использовать координаты осей для создания изображения без его построения в Matlab - PullRequest
2 голосов
/ 12 октября 2011

У меня есть изображение, полное объектов в форме эллипса.Мне нужно спроектировать эллипс для каждого объекта, который лучше всего подходит для самого объекта.Я нашел код, который помогает мне построить эллипсы на изображении здесь .

Я изменил окончательную часть, сохранив x и y в трехмерной матрице (одно измерениедля x, другое для y и 3-е для количества объектов).Поскольку этот код находится в цикле for, я не хочу генерировать на нем эллипсы графического изображения, сохранять его и загружать с помощью imread, чтобы передать его остальному коду.

Есть ли способ преобразовать эту трехмерную матрицу в черно-белое изображение, полное из подходящих эллипсов в правильном положении на изображении?

1 Ответ

1 голос
/ 12 октября 2011

Эллипсы нарисованы поверх существующего рисунка из-за оператора hold on после того, как изображение показано с использованием imshow. Итак, вместо этого:

imshow(bw)
hold on

Просто создайте новую фигуру, используя оператор figure:

figure

[Изменить]

Хорошо, во-первых, хранение только (x, y) дает вам только центры эллипса. Чтобы нарисовать эллипс, вам также необходимо сохранить размер его основной / вспомогательной оси (a, b) и угол его ориентации (theta).

Я бы просто повторно использовал цикл, который у вас уже есть, но заменил plot простым установлением пикселя изображения bw в 1 для каждой координаты:

% get image dimensions
dim = size(bw);

% preallocate a blank bw image
target = false(dim);

% for each ellipse
for k = 1:length(s)

    % this part remains the same:
    xbar = s(k).Centroid(1);
    ybar = s(k).Centroid(2);

    a = s(k).MajorAxisLength/2;
    b = s(k).MinorAxisLength/2;

    theta = pi*s(k).Orientation/180;
    R = [ cos(theta)   sin(theta)
         -sin(theta)   cos(theta)];

    xy = [a*cosphi; b*sinphi];
    xy = R*xy;

    x = xy(1,:) + xbar;
    y = xy(2,:) + ybar;

    % ----------
    % but replace plot(x,y) with this:

    % limit to image dimensions (1:256)
    x(x<1) = 1; x(x>dim(1))=dim(1);
    y(y<1) = 1; y(y>dim(2))=dim(2);    

    % set those pixels to 1
    target(sub2ind(dim, round(x),round(y))) = 1;

end

imshow(target);

Прямо сейчас есть эллипсы, которые находятся за пределами границ изображения. Вот почему их координаты x, y должны быть ограничены (1: 256); в противном случае вы получите ошибку вне допустимого диапазона. Вам все еще нужно переосмыслить, должны ли эти эллипсы быть полностью удалены или нарисованы частично, как здесь.

...