如何忽略直方图中的某些值?不在 Matlab 中使用 NaN?

How to ignore certain values in A histogram? without using NaN in Matlab?

假设我有一个灰度图像 S 并且我希望忽略所有高于 250 的值,我如何在不使用 NaN 的情况下做到这一点?我不想使用 NaN 的原因是因为我希望从结果图像中获取统计信息,例如平均值等。

您可以收集所有小于 250 的图像像素强度。这实际上是在执行相同的操作。如果您的图像存储在 A 中,您只需执行以下操作:

pix = A(A < 250);

pix 将是 A 中强度为 249 或更小的所有图像像素的单个向量。从那里,你可以进行任何你想要的操作,比如平均值,标准差,计算上面的直方图等等

根据您的 post 标题,我们可以使用图像处理工具箱中的 imhist 非常轻松地计算图像的直方图,因此:

out = imhist(pix);

这将为您提供一个包含 256 个元素的向量,其中每个值表示特定强度的强度计数。如果我们正确地执行此操作,您应该只能看到强度为 249(向量中的位置 250)的 bin 计数,并且您应该看到。如果您没有图像处理工具箱,您可以使用 histc 重复相同的操作并手动指定 bin 截止值从 0 到 249:

out = histc(pix, 0:249);

此处的不同之处在于,我们将获得正好包含 250 个 bin 的直方图,而 imhist 默认情况下将为您提供 256 个 bin。但是,histc 即将被弃用,建议使用 histcounts。还是一样的语法:

out = histcounts(pix, 0:249);

您可以使用逻辑索引仅使用指定范围内的值构建直方图。例如,您可以这样做:

histogram(imgData(imgData < 250))