0

我正在做的是使用内置 MATLAB funktion imregionalmax 进行基于像素的树检测。几个步骤后,我得到一个矩阵,其中包含从 1 到 n 的值,基于检测到的树的数量。每棵树都通过一个唯一的数字表示(见下图)。不属于树的像素通过 NaN 表示。

树矩阵

结果应如下所示:

结果

我得到的最接近上述结果的方法是使用轮廓函数,尽管它并不能很好地完成这项工作,因为它通过像素中间而不是外部绘制轮廓。

编辑:我有一个带有高度值的矩阵(与上面的大小相同),轮廓应该只是一个覆盖。另外,我希望这个轮廓真正位于像素的边缘。

4

1 回答 1

0

因此,只要 ROI 矩阵发生变化,您就希望获得正值。在我看来你正在寻找gradient

也许试试这个:

[FX,FY]=gradient(ROI_Matrix);
res = FX~=0 | FY~=0; %so if there is a change in the x-direction or in the y-direction the result for that pixel is 1.

image(res)

[编辑]

你想画线,而不是彩色像素。所以让我们画线

imagesc(ROI_Matrix);
[FX,FY]=gradient(ROI_Matrix);
FX = FX~=0;FY = FY~=0;
hold on;
%change in x, horizontal line
for i = 1:size(FX,2)
    for j = 1:size(FX,1)
        if FX(i,j)
            plot([i,i],[j,j+1],'k-');
        end
    end
end
%change in y, verticle line
for i = 1:size(FY,2)
    for j = 1:size(FY,1)
        if FY(i,j)
            plot([i,i+1],[j,j],'k-');
        end
    end
end
hold off;
于 2018-06-05T12:42:13.437 回答