寻找图像的区域

mee*_*ena 4 matlab label image area

我使用连通分量标记算法(bwconncomp)来标记二进制图像的不同部分(MATLAB).现在我需要计算不同标签的面积并删除面积较小的标签.我可以使用默认的区域查找命令,还是在matlab中有任何特定的命令...帮助..

Bil*_*ham 9

文档:

CC = bwconncomp(BW)返回BW中找到的连通分量CC.二进制图像BW可以具有任何尺寸.CC是一个有四个领域的结构......

CC中的最后一个字段PixelIdxList是:

[a] 1-by-NumObjects单元阵列,其中单元阵列中的第k个元素是包含第k个对象中像素的线性索引的向量.

您可以通过查看单元格数组中相应条目的长度来查找每个标签的区域.就像是:

areas_in_pixels = cellfun(@length, CC.PixelIdxList);
Run Code Online (Sandbox Code Playgroud)

PixelIdxList是一个单元阵列,其每个成员包含该连接组件中存在的像素的线性索引.上面的代码行查找单元格数组中每个单元格的长度 - 即每个连接组件中的像素数.

我习惯于cellfun保持代码简短有效.编写相同内容的另一种方式是:

areas_in_pixels = nan(1, length(CC.PixelIdxList);
for i = 1:length(CC.PixelIdxList)
  areas_in_pixels(i) = length(CC.PixelIdxList{i});
end 
Run Code Online (Sandbox Code Playgroud)

对于每个连接的组件,您可以通过访问areas_in_pixels中的元素来查找该组件的大小(以像素为单位):

areas_in_pixels(34)   %# area of connected component number 34
Run Code Online (Sandbox Code Playgroud)