假设我们有一张灰度图像。有没有办法计算非黑色像素的分布方式,即它们是在一个还是几个地方分组,还是在整个图像中均匀分布?
答案 0 :(得分:0)
答案 1 :(得分:0)
听起来你正在寻找的是你的图像光栅化版本的空间时刻。
首先,您需要对图像进行阈值处理以使其成为二进制: http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold
如果你想要一个空间矩的物理类比,你可以想象每个白色像素是一个单位点质量,那么第二个时刻就是图像的转动惯量。如果白色像素(点质量)紧密聚集,则第二个时刻将很低(图像将很容易旋转)。
答案 2 :(得分:0)
我想分享我用过的另一种方法。
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函数的影响会更小,平均值会更大。