【问题标题】:Finding connected components in Matlab gives wrong results在 Matlab 中查找连通分量会给出错误的结果
【发布时间】:2015-10-05 22:26:35
【问题描述】:

我有一个大小为 60-by-90-by-10 的二进制 3D 图像。使用以下 Matlab 代码,我正在图像中搜索 1s 的连接体素:

conn = 26;
CC = bwconncomp(img, conn);
stats = regionprops(CC,'pixellist');

真正奇怪的是 stats 会返回 3D 图像之外的坐标。

例如对于

voxels = stats(6).PixelList;
voxels(23,:)

我得到了[61,15,4] 的 3D 坐标。

这里有什么问题?关于这个问题我也担心连通分量的计算是错误的。

这是 3D 图像(作为 .mat 文件):https://www.dropbox.com/s/pw3yzbcx4uyhh9s/img.mat?dl=0

【问题讨论】:

  • From toe docs, PixelList[x y z ...] 的形式返回坐标。我的猜测是它正在切换xy,因为它们通常表示columnrow,而不是在访问矩阵时默认的rowcolumn。无论如何,那会很奇怪!

标签: matlab image-processing multidimensional-array 3d cluster-analysis


【解决方案1】:

您的 .mat 文件显示一个大小为 60x90x10 的矩阵,这意味着 60 行、90 列和 10 个波段,因此 y=60、x=90 和 z=10。

看起来计算是正确的,你只是对你的初始图像大小感到困惑......什么都没有切换,你的图像与你假设的大小不同:-)(试试imagesc(img(:,:,1))看看!)

这行/列与 x/y 的事情可能很烦人,我从经验中知道...

【讨论】:

  • 为什么 y 代表行?在矩阵中,通常行是第一个索引,列是第二个索引,因此行 = x 和列 = y。使用 size(M,1) 也可以获得行数...
  • 尽管如此,所以我得到了 (61,15,4) 的 3D 坐标,如果我想在 img 中查找它,我必须使用 img(15,61,4)。对吗?
  • 但再想一想:行数在垂直方向,因此 Y(在 2D 情况下),列 = 水平 = X(至少 MATLAB 是这样认为的)。显示您的图像并查看!
  • 您的 60x90x10 矩阵表示宽度为 90 (=X) 和高度为 60 (=Y) 的图像。也许这有帮助......
猜你喜欢
  • 2011-06-01
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多