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

时间:2017-11-07 09:48:47

标签: matlab image-processing contour

我想获得一个n * m矩阵,其近似值为#34;高度"在每个离散点。输入是来自地图的轮廓的图片(参见下面的链接),每个轮廓线表示高度增加或减少5米。

我的想法:

  • 我将图片作为逻辑png导入到一个名为A的矩阵中,这意味着矩阵中的每条轮廓线都是一条连接的条带,其他一切只有0。 / LI>
  • 我最初的想法是从矩阵的左上角开始,将高度设置为零,声明一个新的矩阵' height'每当我们遇到一个' 1'时,先加上5米来计算height(:,1)。在A矩阵中。知道我现在每行的第一个整个行,从左边开始,每次我们遇到一个'时加5米。
  • 我很快意识到这不会起作用,因为算法无法理解它是应该增加还是减去高度,即如果我们正在上坡或下坡。
  • 如果我能以某种方式逼近轮廓线强度的渐变,即使上坡总是可能是下坡,反之亦然,但我可以手动决定这两种情况的真实性。

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

1 个答案:

答案 0 :(得分:2)

正在进行中

%% 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)标记每个相邻区域(不知道怎么做)

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

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