首页 文章

从MATLAB中未知级别的水平曲线表面

提问于
浏览
4

我想获得一个n * m矩阵,每个离散点都有一个近似的“高度” . 输入是来自 Map 的轮廓的图片(参见下面的链接),每个轮廓线表示高度增加或减少5米 .

我的想法:

  • 我将图片作为逻辑png导入到一个名为 A 的矩阵中,这意味着矩阵中的每条轮廓线都是'1'的连接条,其他一切都只是0 .

  • 我最初的想法是从矩阵的左上角开始,将高度设置为零,声明一个新的矩阵'height'并开始计算 height(:,1) ,每次我们在 A 矩阵中遇到'1'时加上5米 . 知道我现在每行的第一个整个行,从左边开始,每次遇到'1'时加5米 .

  • 我很快意识到这不起作用,因为算法无法理解它是否应该增加或减去高度,即如果我们正在上坡或下坡 .

  • 如果我能以某种方式逼近轮廓线强度的渐变,即使上坡总是可能是下坡,反之亦然,但我可以手动决定这两种情况的真实性 .

图片:
https://i.stack.imgur.com/pRkiY.jpg

1 回答

  • 2

    WORK IN PROGRESS

    %% Read and binarize the image
    I=imread('https://i.stack.imgur.com/pRkiY.jpg'); 
    I=rgb2gray(I);
    I=I>graythresh(I)*255;
    
    %% Get skeleton, i.e. the lines!
    sk=bwmorph(~I,'skel',Inf);
    
    %% lines are too thin, dilate them
    dilated=~imdilate(sk, strel('disk', 2, 4));
    
    %% label the image!
    test=bwlabel(dilated,8);
    
    imshow(test,[]); colormap(plasma); % use colormap parula if you prefer.
    

    enter image description here

    缺失:用邻居的数字1(或-1)标记每个相邻区域(不知道怎么做)

    缺失:插入平坦区域 . 一旦知道高度,这应该是可行的 . 可以将骨架图像中的像素设置为高度,并使用 griddata 插入其余部分,这将很慢,但仍然可行 .


    免责声明:尚未完整答案,请随时编辑或重复使用此答案中的代码以进一步解决问题!

相关问题