【发布时间】:2016-02-21 18:21:24
【问题描述】:
我想实现以下Matlab函数:
function hist = binnedRgbHist(im, numChannelBins)
给定一个图像 im 和一个介于 1 和 256 之间的数字 numChannelBins,它应该创建一个大小为 (numChannelBins)^3 的直方图。
例如,如果numChannelBins 为2,则应生成以下 8 大小的直方图:
-
R < 128, G < 128, B < 128的像素数 -
R < 128, G < 128, B >= 128的像素数 -
R < 128, G >= 128, B < 128的像素数 -
R < 128, G >= 128, B >= 128的像素数 -
R > 128, G < 128, B < 128的像素数 -
R > 128, G < 128, B >= 128的像素数 -
R > 128, G >= 128, B < 128的像素数 -
R > 128, G >= 128, B >= 128的像素数
这就像创建一个立方体,其中每个轴代表(R、G 和 B)中的一个,其中每个轴分为 2 个 bin => 立方体中最终有 8 个 bin。
我的问题:
- 它有内置函数吗?
- 如果不是,使用 GPU 以 runtinme 方式实现它会更好吗?我应该更好地迭代像素一次并手动创建直方图,还是应该更好地迭代 bin 并每次计算满足 bin 条件的像素数?
【问题讨论】:
-
这个问题/答案可能也很有趣。我将每个 RGB 元组转换为单个 1D 线性索引,然后颜色直方图变为 1D 数组。我也使用了
accumarray,但是从颜色到索引的转换很重要:stackoverflow.com/questions/25830225/…
标签: arrays matlab image-processing histogram