如何确定图像中多边形的面积

小子

如果我有一个凸多边形顶点,那么我的图像面积计算就不会由标准公式得出准确的结果。

(为简单起见)如果我有3x3的正方形,并且顶点为(1,1)(1,3)(3,3)(3,1)

在此处输入图片说明

通过此处描述的多边形面积计算方法

在此处输入图片说明

然后将总和除以2得到面积。

因此,对于上述3 x 3数据,我们将面积设为4而不是9。

在此处输入图片说明

发生这种情况是因为顶点不是点而是像素

这是相应的代码。坐标是循环的。

int X[] = { 1, 1, 3, 3, 1};
int Y[] = { 1, 3, 3, 1, 1};
double Sum1 = 0;
double Sum2 = 0;
int numElements = 5;

    for (int k = 0; k < numElements-1; k++)
    {
        Sum1 += X[k] * Y[k + 1];
        Sum2 += Y[k] * X[k + 1];
    }

    double area = std::abs((double)(Sum1 - Sum2))/2;

对于正方形,我们可以对宽度和高度进行+1并获得正确的面积。但是图像中的不规则多边形呢?我希望这个问题有意义。

小子

可以通过以下步骤计算面积:

1)获取顶点之间的像素

2)按x坐标(或y坐标)对像素进行排序

3)取特定x (或y)值的最小和最大y坐标(或x)之间的差并将其加一

4)总结总差异

注意:该区域可能会有所不同(如果多边形中有倾斜的边缘),具体取决于所选择的线条绘制方法

int compare(const void * a, const void * b)
{
  return (((Point*)a)->x() - ((Point*)b)->x());
}


double CalculateConvexHullArea(vector<int> ConvexHullX, vector<int> ConvexHullY)
{
    float Sum1 = 0;
    float Sum2 = 0;
    std::vector<Point> FillPoints;


        for (int k = 0; k < ConvexHullX.size() - 1; k++)
        {
            drawLine(ConvexHullX[k], ConvexHullX[k+1], ConvexHullY[k], ConvexHullY[k+1], FillPoints);
        }

        //sorting coordinates
        qsort(FillPoints.data(), FillPoints.size(), sizeof(Point), compare);

        double area = 0;
        int startY = FillPoints[0].y(), endY = FillPoints[0].y();
        int currX = FillPoints[0].x();


        // traversing x and summing up diff of min and max Y
        for (int cnt = 0; cnt < FillPoints.size(); cnt++)
        {
            if (FillPoints[cnt].x() == currX)
            {
                startY = startY > FillPoints[cnt].y() ? FillPoints[cnt].y() : startY;
                endY = endY < FillPoints[cnt].y() ? FillPoints[cnt].y() : endY;
            }
            else
            {
                int diffY = endY - startY + 1;
                area += diffY;
                currX = FillPoints[cnt].x();
                startY = endY = FillPoints[cnt].y();
            }
        }

        return area + endY - startY + 1;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GeoDjango:确定多边形的面积

来自分类Dev

如何确定图像中内接给定多边形内的点(像素)

来自分类Dev

获取多边形的面积

来自分类Dev

如何确定多边形的类型

来自分类Dev

如何加快多边形面积的计算?

来自分类Dev

如何计算地球上自相交多边形的面积

来自分类Dev

在for循环中计算R中多边形的面积

来自分类Dev

使用嵌套多边形数组中的实际面积查找最里面的多边形

来自分类Dev

MK多边形面积计算

来自分类Dev

R:计算重叠多边形面积

来自分类Dev

计算常规多边形问题的面积

来自分类Dev

多边形面积到点

来自分类Dev

如何计算每个多边形具有不同坐标的大量多边形的面积

来自分类Dev

如何在圆柱等面积投影中添加轴以映射?为什么边界处的多边形线会伸出?

来自分类Dev

确定点位于哪个geoJSON多边形中

来自分类Dev

带图像的多边形

来自分类Dev

带图像的多边形

来自分类Dev

如何在多边形Google Map API中添加图像?

来自分类Dev

如何通过绘制边界框(或多边形)来裁剪图像中的多个对象?

来自分类Dev

如何在多边形Google Map API中添加图像?

来自分类Dev

如何切出图像的多边形部分?

来自分类Dev

如何用图像OpenCV填充多边形

来自分类Dev

使用php从图像中裁剪多边形

来自分类Dev

使用php从图像中裁剪多边形

来自分类Dev

如何使用坐标通过辛普森规则计算多边形的面积?

来自分类Dev

如何使用sympy计算两个多边形的相交面积?

来自分类Dev

如何从多多边形中删除同一多边形的多个条目?

来自分类Dev

如何从凹多边形中的顶点v查找多边形的可见性

来自分类Dev

如何在Postgis中检测其他(许多)多边形内的多边形

Related 相关文章

热门标签

归档