计算矩阵中的岛屿(最好在 IDL 中)

Counting islands in a matrix (preferably in IDL)

如何计算矩阵中连续值的数量?例如,如果

A= [ 1 0 1 0 0 0 0 \ 1 1 1 0 0 0 1\ 1 1 0 1 1 1 1]

是一个 7 x 3 矩阵,那么结果应该表明有 12 个连续的值是“1”(以粗体突出显示),有 8 个连续的 0 值(以斜体突出显示)和一个单独的 0 值. IDL 中的代码是首选,但 MATLAB 也会有所帮助。

这就是您可以在 MATLAB 中使用 bwconncomp 函数执行的操作。这是图像处理工具箱中的一个函数。我不太了解IDL,它可能有类似的功能。

bwconncomp returns 一个包含一些信息的结构,其中一个字段是 PixelIdxList,它是一个元胞数组,每个连接的组件都有一个元素。这些元素中的每一个都是一个向量,其索引指向已连接组件中的数组元素之一。对于示例中的 1 元素,此元胞数组将有一个包含 12 个值的向量。对于 0 元素的情况,它将有两个向量,一个具有 1 个值,一个具有 8 个值:

>> A = [ 1 0 1 0 0 0 0 ; 1 1 1 0 0 0 1 ; 1 1 0 1 1 1 1 ];
>> CC = bwconncomp(A==1, 8);
>> cellfun(@numel, CC.PixelIdxList)
ans = 
    12

>> CC = bwconncomp(A==0, 8);
>> cellfun(@numel, CC.PixelIdxList)
ans =
     1     8

bwconncomp48 作为第二个参数。这指定什么被认为是连接的元素(连续值、邻居)。 4表示只有N,S,E,W这4个元素相连; 8 表示还存在对角线连接(8 个邻居)。