标签: convex-hull

查询凸包内的人工块体积

问题:

我有一个三维点云,每个块的质心代表一个块.为简单起见,这个例子只是二维的.如图所示,我想根据参数包含感兴趣的块.在这种情况下块1,6,5,4.为了进一步处理它们,我需要通过使用alpha形状或凸包来找到它们周围最小的船体.我有每个质心的坐标,我知道块扩展,所以我可以通过以下方式轻松找到块的边缘点:

    xdimension=5;
ydimension=5;
block1=[5 15 1];
block2=[5 10 0];
block3=[5 5 0];
block4=[10 5 1];
block5=[10 10 1];
block6=[10 15 1];
block7=[15 5 0];
block8=[15 10 0];
block9=[15 15 0];
blocks=[block1;block2;block3;block4;block5;block6;block7;block8;block9]

dimension=[xdimension/2 ydimension/2];
point1=[1 1].*dimension;
point2=[1 -1].*dimension;
point3=[-1 1].*dimension;
point4=[-1 -1].*dimension;
i=size(blocks,1);
point1=repmat(point1,i,1);
point2=repmat(point2,i,1);
point3=repmat(point3,i,1);
point4=repmat(point4,i,1);
edges1=[blocks(:,1:2)+point1, blocks(:,3)] ;
edges2=[blocks(:,1:2)+point2, blocks(:,3)];
edges3=[blocks(:,1:2)+point3, blocks(:,3)];
edges4=[blocks(:,1:2)+point4, blocks(:,3)];
edges=[edges1;edges2;edges3;edges4];
x=edges(edges(:,3)==1,1);
y=edges(edges(:,3)==1,2);
K=convhull(x,y)
scatter(edges(:,1), edges(:,2))
hold on
plot(x(K),y(K),'r-')
hold off
Run Code Online (Sandbox Code Playgroud)

这会产生类似于此处的图片.

如何查询第2和第3块凸包所包含的曲面(或我的实际问题中的体积)?我需要包含的每个单独块的精确表面/体积,除了我指定的那些(这里有二进制指示器).请注意,这是一个示例,我正在寻找如何独立于示例的想法.我真的很感激一些帮助,因为我主要陷入困境,我不知道如何解决它.

在此输入图像描述

matlab convex-hull

5
推荐指数
1
解决办法
144
查看次数

将凸包转换为二进制掩码

我想生成一个二进制掩码,其中包含内部所有体素的二进制掩码,以及体积外所有体素的零.体积由围绕一组3D坐标(<100;一些坐标在体积内)的凸包定义.

我可以使用CONVHULLN获取凸包,但是如何将其转换为二进制掩码?

如果没有通过凸包的好方法,你还有其他想法如何创建二进制掩码?

matlab geometry convex-hull

4
推荐指数
1
解决办法
6031
查看次数

使用凸包算法对整数进行排序

二维凸包的算法使用排序。假设有人给你一个库,其中凸包被实现为黑匣子。展示如何使用凸包算法对给定整数序列进行排序。“黑匣子”一词意味着您不查看代码内部;而是查看代码。你只知道输入和输出是什么以及结果是什么样的。您无法从凸包的库实现中“拉出排序算法”。您可以假设您可以将凸包算法作为原始步骤调用。

sorting convex-hull

4
推荐指数
1
解决办法
3550
查看次数

Java Android Opencv 2.3上的Convex Hull

请帮我,

Android上的Convex Hull有问题.我使用Java和OpenCV 2.3.

在我使用Java之前,我使用Visual Studio 2008在C++上创建它.

此代码可以在C++上成功运行.

现在,我想在Android上将它从C++转换为Java.当我在SDK Android模拟器上运行它时,我发现了像"强制关闭"这样的错误.

这是我在C++上的代码:

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
drawing = Mat::zeros( canny_output.size(), CV_64F );

/// Find the convex hull object for each contour
vector<vector<Point> > hull ( contours.size() );
for( int i = 0; i < contours.size(); i++ )
  {  convexHull( Mat(contours[i]), hull[i], false );
}

for(size_t i = 0; i < contours.size(); i++){
    drawContours( drawing, hull, i, Scalar(255, 255, 255), …
Run Code Online (Sandbox Code Playgroud)

java android opencv convex-hull

4
推荐指数
2
解决办法
8945
查看次数

如何检查3d网格的凸度?

有没有快速的方法来做到这一点?在线搜索显示函数或单个多边形的凸性.但我需要能够检查整个模型.物体可以具有凸面,但可以像圆环一样整体凹入.

3d graphics convex-hull game-engine computational-geometry

4
推荐指数
1
解决办法
2976
查看次数

如何在 OpenCV 中计算图像中的提示数量?

我有一组平假名字符,我想计算字符的端点/提示数量。

示例:输入图像:

在此处输入图片说明

所需的输出图像:

在此处输入图片说明

我试过使用凸包

在此处输入图片说明

代码:(基于此处的opencv教程)

    findContours(threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

    vector<vector<Point> >hull(contours.size());

    for (int i = 0; i < contours.size(); i++)
    {
        convexHull(Mat(contours[i]), hull[i], false);
    }

    Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
    for (int i = 0; i< contours.size(); i++)
    {
        if (hierarchy[i][3] == 0) {
            Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
            drawContours(drawing, hull, i, color, 1, 8, vector<Vec4i>(), 0, Point());
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后 conrnerHarris() 但它返回了太多不需要的角落

在此处输入图片说明

代码:(基于此处的opencv教程)

    int blockSize = 2;
    int …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image convex-hull corner-detection

4
推荐指数
1
解决办法
880
查看次数

如何获得凸包中均匀分布的点?

给定一组点,

points = np.random.randn(...) # n 3d points
Run Code Online (Sandbox Code Playgroud)

我想均匀地填充由凸包定义的体积,其中它们位于nx33d 点列表( np.array of shape )中。

我可以得到凸包

hull = scipy.spatial.ConvexHull(points)
Run Code Online (Sandbox Code Playgroud)

获得均匀填充该船体体积的点列表的最快方法是什么?

python numpy scipy convex-hull computational-geometry

4
推荐指数
1
解决办法
2846
查看次数

Vanilla JavaScript Convex Hull Google 地图上意想不到的多边形形状

我在创建复杂的凸包时遇到问题。如果我更改为具有 10 个点左右的简单多边形,效果很好,但是当我在大面积上有 20-30 个点时,它会在多边形中创建“分割”。然而数学表明它应该寻找所有异常值,并将它们用作“船体点”。我想知道我的数学是否不正确,或者这是否是 JavaScript 的侥幸?

作为参考,这里是我收集数学和示例代码片段的网站:平面点集的凸包

这是我所能得到的最精简的,同时仍然作为一个独立的片段发挥作用。

        var gmarkers = [];
        var points = [];
        var hullPoints = [];
        var map = null;
        var polyline;

        var infowindow = new google.maps.InfoWindow(
            {
                size: new google.maps.Size(150, 50)
            });

        function initialize() {
            var myOptions = {
                zoom: 10,
                center: new google.maps.LatLng( 41.024767, -74.122642),
                mapTypeControl: true,
                mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
                navigationControl: true,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            }
            map = new google.maps.Map(document.getElementById("map_canvas"),
                myOptions);

            google.maps.event.addListener(map, 'click', function () {
                infowindow.close();
            });

            google.maps.event.addListenerOnce(map, 'bounds_changed', function () { …
Run Code Online (Sandbox Code Playgroud)

javascript google-maps convex-hull google-maps-api-3

4
推荐指数
1
解决办法
823
查看次数

获得2D点集的周长

我在2D中有一组点(x和y的坐标),现在我需要丢弃对我没有意义的所有点,我的意思是我只对这个点的区域感兴趣跟踪.

总之,这个

在此输入图像描述

它应该产生这个

在此输入图像描述

问题:在这一点上,哪种算法可以做这种过滤?

algorithm convex-hull computational-geometry

3
推荐指数
1
解决办法
2695
查看次数

在openCV2 Python中绘制convexHull

所以我试图从python中的轮廓绘制convexHull,但是当我打印图像时它没有改变.

roi=mask[y:y+h,x:x+w]
roi = cv2.fastNlMeansDenoisingColored(roi,None,15,15,7,21)
hull = cv2.convexHull(cnt)
cv2.drawContours(roi,[hull],0,(147,0,255),2)
cv2.imshow(str(i),roi)
blank_image[y:y+h,x:x+w] = roi
Run Code Online (Sandbox Code Playgroud)

但是,如果我不包含代码,则显示的图像完全相同.我在网上看了,但似乎找不到答案.这是一个示例图片:示例图像

python ocr image-processing convex-hull opencv-contour

3
推荐指数
1
解决办法
1万
查看次数