【问题标题】:Extract outline from MATLAB Isosurface从 MATLAB 等值面中提取轮廓
【发布时间】:2014-10-27 09:31:06
【问题描述】:

我在 MATLAB 中绘制了一个等值面,例如:

对于我目前拥有的给定视图设置,我想从中提取轮廓。我期望的输出是这样的(由 GIMP 制作):

有没有办法以编程方式执行此操作,因此我不必在 GIMP 中手动执行此操作?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这够好吗?边缘检测取自 bwboundaries 文档。

    clear, close all
    [x y z v] = flow;
    figure(1)
    p = patch(isosurface(x, y, z, v, -3));
    set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
    daspect([1 1 1])
    view(3)
    grid off
    axis off
    print -dbmp test
    
    I=imread('test.bmp');
    G = im2bw(I, graythresh(I));
    [B,L] = bwboundaries(~G,'noholes');
    
    for k = 1:length(B)
        boundary = B{k};
        plot(boundary(:,2), -boundary(:,1), 'k', 'LineWidth', 2)
        hold on
    end
    hold off
    

    结果:

    【讨论】:

    • 这真的很好,但它一次只能用于一个视角 - 我需要重新运行保存图像过程以平移 3d 图像。
    • 你会的。如果您可以自动化平移,您也可以轻松地自动化其余过程。如果你只是用鼠标拖动它是行不通的,但我想不出什么可以帮助你做到这一点,除了当你释放鼠标按钮时执行的某种回调函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2020-03-29
    • 1970-01-01
    • 2013-12-17
    • 2011-05-24
    • 2015-03-10
    相关资源
    最近更新 更多