【发布时间】:2016-07-30 18:26:33
【问题描述】:
假设我们有一张灰度图像。有没有办法计算非黑色像素是如何分布的,即它们是在一个或几个地方分组,还是在整个图像中均匀分布?
【问题讨论】:
标签: opencv colors distribution
假设我们有一张灰度图像。有没有办法计算非黑色像素是如何分布的,即它们是在一个或几个地方分组,还是在整个图像中均匀分布?
【问题讨论】:
标签: opencv colors distribution
【讨论】:
听起来您正在寻找的是图像栅格化版本的空间时刻。
首先,您需要对图像进行阈值处理以使其成为二进制: http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold
如果您想要空间矩的物理类比,您可以想象每个白色像素是一个单位点质量,那么第二个矩就是图像的转动惯量。如果白色像素(点块)紧密聚集,那么二阶矩会很低(图像很容易旋转)。
【讨论】:
我想分享我使用过的另一种方法。
Mat img = imread(argv[1], CV_LOAD_IMAGE_COLOR);
cvtColor(img, img, CV_RGB2GRAY);
threshold(img, img, 35, 255, THRESH_BINARY);
Mat distance;
distanceTransform(img, distance, CV_DIST_L2, 3);
distance = min(distance, 1);
Scalar distribution = mean(dist);
cout << "The distribution is: " << distribution << std::endl;
棘手的部分是distanceTransform 和min 函数的组合。 min 函数对分布较好的图像影响较小,均值较大。
【讨论】: