MATLAB图形创建时自动缩放到特定点

3

我编写了一些代码,可以跟随附图中显示的黑色边缘。每次选择下一个点时,图形将重新绘制以显示更新。这样做是为了以动画方式演示代码。

enter image description here

我希望能够自动放大特定点(中心青色点周围的红色正方形)。希望自动缩放的区域将随着该点沿着黑边追踪而移动。以下代码编写为函数,每次检测到下一个边缘像素时,我都会在我的主要脚本中调用它。我尝试设置轴的范围为POI周围的范围,但无法使其正常工作。
function draw_point2(BinaryImage, P, P_r, P_c)
%P is a 1x2 array for the position of the current black pixel.
%P_r is nx1 list of all the row values for the detected pixels.
%P_c is nx1 list of all the column values for the detected pixels.


    cla
    r = P(1,1);
    c = P(1,2);
    figure (100)
    imshow(BinaryImage) , title('Binary image')
    hold on;
    plot(P_c, P_r, 'c.', 'LineWidth', 2); hold on
    %Current Black Pixel
    plot(c, r, 'c.', 'LineWidth', 2); hold on;

    % Possible Black Pixel - Next
    plot(c, r+1, 'rs', 'LineWidth', 2); hold on
    plot(c, r-1, 'rs', 'LineWidth', 2); hold on
    plot(c-1, r, 'rs', 'LineWidth', 2); hold on
    plot(c+1, r, 'rs', 'LineWidth', 2); hold on
    plot(c-1, r+1, 'rs', 'LineWidth', 2); hold on
    plot(c-1, r-1, 'rs', 'LineWidth', 2); hold on
    plot(c+1, r+1, 'rs', 'LineWidth', 2); hold on
    plot(c+1, r-1, 'rs', 'LineWidth', 2); hold on
    axis equal
    truesize;
end

谢谢


编辑1

下面的图片展示了期望输出和当前输出的对比。(它展示了我希望绘制的图形效果。它显示了兴趣点(POI)的缩放比例和中心位置。在理想情况下,POI也应该始终居中于图形中。enter image description here


你能展示一下你期望的输出是什么样子吗?从你的描述中很难判断。 - Suever
我已经编辑了问题,试图说明期望的输出应该是什么样子。 - bilaly
@bilaly,我的回答有什么问题吗?我还能以其他方式帮助你吗?请告诉我,如果需要的话,我可以再添加更多内容。 - Ander Biguri
1个回答

1
使用函数axis
您可以使用axis([xmin xmax ymin ymax])定义限制。在您的情况下,xmin将类似于c-20,而xmax=c+20

嗨,感谢回复。不幸的是,如果我在绘图附近放置此代码,则仅在逐步执行代码时有效,但是当代码自行运行并循环查找下一个点时,图形不会更新。 - bilaly
@bilaly 这意味着某个地方有东西正在覆盖指令。也许是 truesize?你需要逐步进行并查看哪个指令实际上正在“取消缩放”图像。 - Ander Biguri
当我逐步执行代码时,它可以正常工作。在我逐步执行代码时,缩放功能有效。更新后的图像也随着缩放一起显示。但是当我通常运行代码时,图像没有被更新。我发现在所有绘图完成后添加一个pause(0.1)可以使其按预期工作。我认为代码运行得太快了,更新后的图像和缩放没有足够的时间生成,直到下一个绘制开始。 - bilaly
@bilaly,不要使用暂停,尝试使用 drawnow - Ander Biguri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接