在Matlab中使用轴坐标生成图像而不绘制图像

时间:2011-10-11 20:35:07

标签: image matlab pixel axes coordinate

我的图像中充满了椭圆形状的物体。我需要为每个对象设计一个最适合对象本身的椭圆。我找到了一个代码,可以帮助我在图像here上绘制省略号。

我在3D矩阵中更改了最后一部分保存xyx的一个维度,y的另一个维度,以及数字的第三个维度对象)。因为此代码位于for循环中,所以我不希望在其上生成图形图椭圆,保存并使用imread上传以将其传递给代码的其余部分。

有没有办法将bw图像中的这个3D矩阵转换为图像中正确位置的拟合椭圆?

1 个答案:

答案 0 :(得分:1)

由于使用hold on显示图像后的imshow语句,因此在现有数字的顶部绘制了省略号。所以,而不是:

imshow(bw)
hold on

使用figure语句创建一个新数字:

figure

<强> [编辑]

好的,首先,仅存储(x, y)仅为您提供椭圆中心。要绘制椭圆,您还需要存储其majos / minor轴大小(ab)及其方向角(theta)。

我只是重复使用您已有的循环,但只需将每个坐标的bw图像像素设置为1即可替换plot

% 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);否则你会出现超出范围的错误。您仍然需要重新考虑是否应该完全删除这些省略号,或者像这里所做的那样部分绘制。